ජාවාට අස්ථිර ක්ෂේත්‍ර ඇත්තේ ඇයි?


Answers:


1686

transientක්ෂේත්‍රයක් අනුක්‍රමිකකරණයේ කොටසක් නොවිය යුතු බව දැක්වීමට ජාවා හි මූල පදය භාවිතා කරයි (එයින් අදහස් වන්නේ ගොනුවකට සමාන ලෙස සුරකින ලදි ).

සිට ජාවා භාෂාව පිරිවිතර, ජාවා SE 7 සංස්කරණය , වගන්තිය 8.3.1.3. transientක්ෂේත්‍ර :

විචල්‍යයන් transientවස්තුවක අඛණ්ඩ තත්වයේ කොටසක් නොවන බව දැක්වීමට සලකුණු කළ හැකිය .

නිදසුනක් ලෙස, ඔබට වෙනත් ක්ෂේත්‍රයන්ගෙන් ව්‍යුත්පන්න වූ ක්ෂේත්‍ර තිබිය හැකි අතර, එය කළ යුත්තේ අනුක්‍රමිකකරණය හරහා රාජ්‍යය දිගටම පැවතීමට වඩා ක්‍රමලේඛිකව පමණි.

GalleryImageරූපයක් සහ රූපයෙන් ලබාගත් සිඟිති රූපයක් අඩංගු පන්තියක් මෙන්න :

class GalleryImage implements Serializable
{
    private Image image;
    private transient Image thumbnailImage;

    private void generateThumbnail()
    {
        // Generate thumbnail.
    }

    private void readObject(ObjectInputStream inputStream)
            throws IOException, ClassNotFoundException
    {
        inputStream.defaultReadObject();
        generateThumbnail();
    }    
}

මෙම උදාහරණයේ දී, thumbnailImageමෙය සිඟිති රූපයකි generateThumbnail.

මෙම thumbnailImageක්ෂේත්ර සලකුණු කර transientඒ පමණක් මුල්, imageඒ වෙනුවට මුල් ප්රතිරූපය හා සිඟිති රූප දෙකම ඕනෑකමින් නොකඩවා වඩා serialized ඇත. මෙයින් අදහස් කරන්නේ අනුක්‍රමික වස්තුව සුරැකීමට අඩු ගබඩා කිරීමක් අවශ්‍ය බවයි. (ඇත්ත වශයෙන්ම, පද්ධතියේ අවශ්‍යතා මත පදනම්ව මෙය යෝග්‍ය විය හැකිය හෝ නොවිය හැකිය - මෙය උදාහරණයක් පමණි.)

ආශ්‍රිතකරණයේදී, readObjectවස්තුවෙහි තත්වය අනුක්‍රමිකකරණය සිදු වූ තත්වයට නැවත යථා තත්ත්වයට පත් කිරීම සඳහා අවශ්‍ය ඕනෑම මෙහෙයුමක් සිදු කිරීමට මෙම ක්‍රමය හැඳින්වේ. මෙන්න, සිඟිති-රූපය ජනනය කළ යුතුය, එබැවින් readObjectක්‍රමය ඉක්මවා ගොස් ඇති අතර එමඟින් generateThumbnailක්‍රමවේදය ඇමතීමෙන් සිඟිති-රූපය ජනනය වේ.

අමතර තොරතුරු සඳහා, ජාවා අනුක්‍රමිකකරණ API ලිපියේ රහස් සොයා ගන්න (එය මුලින් සූර්ය සංවර්ධක ජාලයෙන් ලබා ගත හැකි විය) transientසමහර අංශවල අනුක්‍රමිකකරණය වැළැක්වීම සඳහා මූල පදය භාවිතා කරන අවස්ථා පිළිබඳව සාකච්ඡා කරන සහ ඉදිරිපත් කරන අංශයක් ඇත.


223
නමුත් එය යතුරු පදයක් මිස ව්‍යාඛ්‍යාවක් නොවන්නේ @DoNotSerializeඇයි?
එලසාර් ලීබෝවිච්

335
මම හිතන්නේ, මෙය අයිති වන්නේ ජාවා හි කිසිදු විවරණයක් නොතිබූ කාලයකට ය.
පීටර් විපර්මන්

48
අනුක්‍රමිකකරණය ජාවාහි අභ්‍යන්තර බව මට අමුතුයි. පරිශීලකයින්ට කියවීමේ හා ලිවීමේ ක්‍රම ඉක්මවා යාමට අවශ්‍ය අතුරු මුහුණතක් හෝ වියුක්ත පන්තියක් ලෙස එය ක්‍රියාත්මක කළ හැකිය.
caleb

7
JMJafar: readObject සාමාන්‍යයෙන් දන්තාලේපකරණ යාන්ත්‍රණයන්ට සම්බන්ධ කර ඇති අතර එය ස්වයංක්‍රීයව හැඳින්වේ. තවද, බොහෝ අවස්ථාවන්හීදී ඔබට එය ඉක්මවා යාමට අවශ්‍ය නොවේ - පෙරනිමි ක්‍රියාත්මක කිරීම උපක්‍රමය කරයි.
මයික් ඇඩ්ලර්

13
ale කාලෙබ් බොහෝ විට අත්සන් නොකළ පූර්ණ සංඛ්‍යා නොමැතිකම නිසා ද්විමය ආකෘතීන් සමඟ කටයුතු කිරීම ජාවාහි ඇදහිය නොහැකි තරම් වේදනාකාරී විය හැකිය.
දකුණට

437

transientමූල පදය තේරුම් ගැනීමට පෙර යමෙකු අනුක්‍රමිකකරණය පිළිබඳ සංකල්පය තේරුම් ගත යුතුය. අනුක්‍රමිකකරණය ගැන පා er කයා දන්නේ නම්, කරුණාකර පළමු කරුණ මඟ හරින්න.

අනුක්‍රමිකකරණය යනු කුමක්ද?

අනුක්‍රමිකකරණය යනු වස්තුවේ තත්වය නොනැසී පවතින ක්‍රියාවලියකි. එහි අර්ථය වන්නේ වස්තුවෙහි තත්වය දිගටම පැවතීම සඳහා භාවිතා කළ හැකි බයිට් ප්‍රවාහයක් බවට පරිවර්තනය කිරීමයි (උදා: ගොනුවක බයිට් ගබඩා කිරීම) හෝ මාරු කිරීම (උදා: ජාලයක් හරහා බයිට් යැවීම). එලෙසම, බයිට් වලින් වස්තුවේ තත්වය නැවත ගෙන ඒමට අපට ඩෙසරීකරණය භාවිතා කළ හැකිය. මෙය ජාවා ක්‍රමලේඛනයේ වැදගත් සංකල්පවලින් එකකි, මන්ද අනුක්‍රමිකකරණය බොහෝ දුරට ජාල වැඩසටහන්කරණයේ භාවිතා වේ. ජාලය හරහා සම්ප්‍රේෂණය කළ යුතු වස්තූන් බයිට් බවට පරිවර්තනය කළ යුතුය. ඒ සඳහා සෑම පන්තියක් හෝ අතුරු මුහුණතක්ම අතුරු මුහුණත ක්‍රියාත්මක කළ යුතුය Serializable. එය කිසිදු ක්‍රමයක් නොමැතිව සලකුණු අතුරුමුහුණතකි.

දැන් එහි transientමූලික පදය සහ එහි අරමුණ කුමක්ද?

පෙරනිමියෙන්, වස්තුවේ සියලු විචල්‍යයන් අඛණ්ඩ තත්වයකට පරිවර්තනය වේ. සමහර අවස්ථා වලදී, සමහර විචල්‍යයන් දිගටම පැවතීමෙන් වැළකී සිටීමට ඔබට අවශ්‍ය විය හැකිය, මන්ද එම විචල්‍යයන් දිගටම පවත්වා ගැනීමේ අවශ්‍යතාවයක් ඔබට නොමැති බැවිනි. එබැවින් ඔබට එම විචල්‍යයන් ලෙස ප්‍රකාශ කළ හැකිය transient. විචල්‍යය ලෙස ප්‍රකාශයට පත් කළ transientහොත් එය නොනැසී පවතිනු ඇත. transientමූල පදයේ ප්‍රධාන අරමුණ එයයි .

ඉහත කරුණු දෙක පහත උදාහරණයෙන් පැහැදිලි කිරීමට මට අවශ්‍යය:

package javabeat.samples;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class NameStore implements Serializable{
    private String firstName;
    private transient String middleName;
    private String lastName;

    public NameStore (String fName, String mName, String lName){
        this.firstName = fName;
        this.middleName = mName;
        this.lastName = lName;
    }

    public String toString(){
        StringBuffer sb = new StringBuffer(40);
        sb.append("First Name : ");
        sb.append(this.firstName);
        sb.append("Middle Name : ");
        sb.append(this.middleName);
        sb.append("Last Name : ");
        sb.append(this.lastName);
        return sb.toString();
    }
}

public class TransientExample{
    public static void main(String args[]) throws Exception {
        NameStore nameStore = new NameStore("Steve", "Middle","Jobs");
        ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("nameStore"));
        // writing to object
        o.writeObject(nameStore);
        o.close();

        // reading from object
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("nameStore"));
        NameStore nameStore1 = (NameStore)in.readObject();
        System.out.println(nameStore1);
    }
}

ප්‍රතිදානය පහත පරිදි වේ:

First Name : Steve
Middle Name : null
Last Name : Jobs

මැද නම ලෙස ප්‍රකාශයට පත් කර ඇති transientබැවින් එය අඛණ්ඩ ගබඩාවේ ගබඩා නොවේ.

මූලාශ්රය


26
මෙම උදාහරණය මෙම කේතයෙන් ලබාගෙන ඇත, ඔබට එය මෙතැනින් කියවිය හැකිය: javabeat.net/2009/02/what-is-transient-keyword-in-java
ක්‍රිෂ්ණා

11
මෙම කොටස මට අමුතු හා ව්‍යාකූල විය හැකිය: "එයින් අදහස් වන්නේ වස්තුවේ තත්වය බයිට් ප්‍රවාහයක් බවට පරිවර්තනය කර ගොනුවක ගබඩා කර ඇති බවයි ". බොහෝ විට අනුක්‍රමිකකරණය ගොනුවකට ලිවීමට සම්බන්ධ නොවන බව මට පෙනේ (උදාහරණයක් ලෙස: පහත දැක්වෙන ජාලකරණ උදාහරණ)
ගාර්ෂියා හර්ටාඩෝ

5
මැද නම පැහැදිලිව වන බැවින්, උදාහරණයක් ලෙස, නරක එකක් නොවන තාවකාලික දේපල.
රෆායෙල්

2
Ap රෆායෙල් මට නම්, උදාහරණය ප්‍රයෝජනවත් වන අතර අවම වශයෙන් සංකල්පය පැහැදිලි කරයි. ඔබ දැනුවත්ව සිටින්නේ නම් මීට වඩා හොඳ උදාහරණයක් ඔබ ලබා දෙනවාද?
චක්ලඩර් අස්ෆක් අරෙෆ්

@Yoda අපි සැඳහුම ඇති විය හැකි NameFormatterපැදවීමට භාවිතා toString(). හෝ වින්‍යාස කිරීම, හෝ බැලීම හෝ ව්‍යාපාර තර්කනය, ... දත්ත වලට පටහැනි වෙනත් දෙයක්.
රෆායෙල්

85

ඔබට අනුක්‍රමික කිරීමට අවශ්‍ය නොවන විචල්‍යයන් අර්ථ දැක්වීමට ඔබට ඉඩ දීම.

වස්තුවක ඔබට අනුක්‍රමික කිරීමට / නොනැසී සිටීමට අවශ්‍ය තොරතුරු තිබිය හැකිය (සමහර විට මව් කර්මාන්තශාලා වස්තුවක් පිළිබඳ සඳහනක්), හෝ සමහර විට එය අනුක්‍රමික කිරීම අර්ථවත් නොවේ. මේවා 'අස්ථිර' ලෙස සලකුණු කිරීමෙන් අදහස් කරන්නේ අනුක්‍රමිකකරණ යාන්ත්‍රණය මෙම ක්ෂේත්‍ර නොසලකා හරිනු ඇති බවයි.


36

මගේ කුඩා දායකත්වය:

අස්ථිර ක්ෂේත්‍රයක් යනු කුමක්ද?
මූලික වශයෙන්, යතුරුපදය සමඟ වෙනස් කරන ඕනෑම ක්ෂේත්‍රයක් transientඅස්ථිර ක්ෂේත්‍රයකි.

ජාවා හි අස්ථිර ක්ෂේත්‍ර අවශ්‍ය වන්නේ ඇයි?
මෙම transientමූල පදය ඔබ serialization ක්රියාවලිය කෙරෙහි යම් පාලනයක් ලබා දෙන අතර ඔබ මෙම ක්රියාවලිය යම් වස්තුවක ගුණාංගයන්ගේ බැහැර කිරීමට ඉඩ දෙයි. ජාවා වස්තූන් නොනැසී පැවතීම සඳහා අනුක්‍රමිකකරණ ක්‍රියාවලිය භාවිතා කරනු ලැබේ, බොහෝ දුරට ඒවායේ ස්ථාන මාරු කරන විට හෝ අක්‍රියව පවතින විට ඒවා ආරක්ෂා කර ගත හැකිය. සමහර විට, වස්තුවක ඇතැම් ගුණාංග අනුක්‍රමික නොකිරීමට එය අර්ථවත් කරයි.

ඔබ අස්ථිර ලෙස සලකුණු කළ යුතු ක්ෂේත්‍ර මොනවාද?
දැන් අපි එහි අරමුණ දනිමුtransientමූල පදය සහ අස්ථිර ක්ෂේත්‍ර, අස්ථිර ලෙස සලකුණු කළ යුතු ක්ෂේත්‍ර මොනවාදැයි දැන ගැනීම වැදගත්ය. ස්ථිතික ක්ෂේත්‍ර අනුක්‍රමික නොවේ, එබැවින් අනුරූපී පදය ද උපක්‍රමය කරයි. නමුත් මෙය ඔබගේ පන්ති සැලසුම විනාශ කළ හැකිය; transientගලවා ගැනීම සඳහා මූලික පදය පැමිණෙන්නේ මෙහිදීය . අන් අයගෙන් සාරධර්ම ලබා ගත හැකි ක්ෂේත්‍ර අනුක්‍රමික කිරීමට ඉඩ නොදීමට මම උත්සාහ කරමි, එබැවින් මම ඒවා අස්ථිර ලෙස සලකුණු කරමි. ඔබට interestවෙනත් ක්ෂේත්‍රයන්ගෙන් ( principal, rate& time) ගණනය කළ හැකි ක්ෂේත්‍රයක් තිබේ නම්, එය අනුක්‍රමික කිරීමට අවශ්‍ය නොවේ.

තවත් හොඳ උදාහරණයක් වන්නේ ලිපි වචන ගණනය කිරීම් ය. ඔබ සම්පූර්ණ ලිපියක්ම සුරකිනවා නම්, වචන ගණන සුරැකීමේ අවශ්‍යතාවයක් නැත, මන්ද ලිපිය "පාළුකර" වූ විට එය ගණනය කළ හැකිය. නැතහොත් ල gers ු-සටහන් ගැන සිතන්න;Logger අවස්ථා කිසි විටෙකත් අනුක්‍රමිකකරණය කිරීමට අවශ්‍ය නොවන බැවින් ඒවා අස්ථිර බවට පත් කළ හැකිය.


63
ඔබේ 'සරල වාක්‍යය' හුදෙක් වචනාර්ථයකි. එය කිසිවක් පැහැදිලි නොකරයි. එය නොමැතිව ඔබ හොඳ වනු ඇත.
ලෝර්න් හි මාක්විස්

1
ක්ෂේත්‍රය තිබිය යුතු ස්ථානය මෙය හොඳ පැහැදිලි කිරීමකිtransient
චක්ලඩර් අස්ෆක් අරෙෆ්

1
පොලී ක්ෂේත්‍රය සහ වචන ගණනය කිරීම් අස්ථිර ක්ෂේත්‍ර සඳහා හොඳ උදාහරණ වේ.
තාරුන්

1
තවත් හොඳ භාවිත අවස්ථාවක්: ඔබේ වස්තුවට සොකට් වැනි සංරචක තිබේ නම් සහ ඔබට අනුක්‍රමිකකරණය කිරීමට අවශ්‍ය නම් සොකට්ටුවට කුමක් සිදුවේද? දිගටම පැවතුනහොත්, ඔබ ආශා කිරීමෙන් පසු සොකට් එක තබා ගන්නේ කුමක් ද? එම සොකට් වස්තුව සෑදීම අර්ථවත් කරයිtransient
මොහොමඩ් සිද්දික්

28

transientවිචල්ය serialized කළ නොහැකි විය හැකි විචල්ය වේ.

මෙය මතකයට එන ප්‍රයෝජනවත් විය හැකි එක් උදාහරණයක් නම්, නිශ්චිත වස්තුවක සන්දර්භය තුළ පමණක් අර්ථවත් වන විචල්‍යයන් සහ ඔබ වස්තුව අනුක්‍රමිකව හා අභිමතකරණය කළ පසු එය අවලංගු වේ. එවැනි අවස්ථාවන්හිදී එම විචල්‍යයන් බවට පත්වීම ප්‍රයෝජනවත් වන අතර nullඑමඟින් ඔබට අවශ්‍ය විටදී ප්‍රයෝජනවත් දත්ත සමඟ ඒවා නැවත ආරම්භ කළ හැකිය.


ඔව්, පන්තියක "මුරපදය හෝ ක්‍රෙඩිකාර්ඩ්පින්" ක්ෂේත්‍ර සාමාජිකයන් වැනි දෙයක්.
මාටීන්

17

transientපන්ති ක්ෂේත්‍රයක් අනුක්‍රමික කිරීමට අවශ්‍ය නොවන බව දැක්වීමට භාවිතා කරයි. බොහෝ විට හොඳම උදාහරණය Threadක්ෂේත්‍රයකි. සාමාන්‍යයෙන් අනුක්‍රමික කිරීමට කිසිදු හේතුවක් නැත Thread, මන්ද එහි තත්වය ඉතා 'ප්‍රවාහ විශේෂිත' ය.


මම වැරදියි නම් මාව නිවැරදි කරන්න, නමුත් නූල් අනුක්‍රමික නොවන බැවින් එය කෙසේ හෝ මඟ හැරෙනු ඇත?
ටී ෆෙනිස්

3
@TFennis: a serializable පන්ති නම් Aයොමු වූ serializable පන්ති B(වගේ Threadඔබේ උදාහරණය තුල), එසේ නම් Aඑක්කෝ සඳහනක් ලෙස ලකුණු කල යුතුය transientXOR සමග සාධාරණ යමක් කිරීම සඳහා පෙරනිමි serialization ක්රියාවලිය යටපත් කිරීම කළ යුතුය BXOR පමණක් serializable උප වර්ගිකරණයන් බව උපකල්පනය Bඇත්තටම ආශ්රයෙන් නොවීමයි (එබැවින් සැබෑ උප පංතිය ඔවුන්ගේ "නරක" මවුපියන් ගැන සැලකිලිමත් විය යුතුය B) XOR විසින් අනුක්‍රමිකකරණය අසාර්ථක වන බව පිළිගනී. එක් අවස්ථාවකදී (අස්ථිර ලෙස සලකුණු කර ඇත) Bස්වයංක්‍රීයව සහ නිහ ly ව මඟ හැරේ.
ඒඑච්

3
@TFennis නැත, එය ව්‍යතිරේකයක් ඇති කරයි.
ලෝර්න් හි මාක්විස්

1
@AH: ඇයි XOR? මම හිතන්නේ ඒ දේවල් වල ඕනෑම සංයෝජනයක් කළ කේතය ක්‍රියාත්මක වනු ඇති අතර සමහර සංයෝජන ප්‍රයෝජනවත් විය හැකිය (උදා: පෙරනිමි අනුක්‍රමිකකරණ ක්‍රියාවලිය අභිබවා යාම ප්‍රයෝජනවත් විය හැකිය.
සුපර් කැට්

16

ස්වදේශික ජාවා හැරුණු විට අනුක්‍රමිකකරණ පද්ධතිවලටද මෙම විකරණකාරකය භාවිතා කළ හැකිය. නිදසුනක් ලෙස, ශිශිරතාරකය ra ට්‍රාන්ස්පෙන්ට් හෝ අස්ථිර විකරණකාරකය සමඟ සලකුණු කර ඇති ක්ෂේත්‍ර නොපවතිනු ඇත . ටෙරකොටා ද මෙම විකරණකාරකයට ගරු කරයි.

නවීකරණයේ සංකේතාත්මක අරුත "මෙම ක්ෂේත්‍රය මතකයේ භාවිතය සඳහා පමණි. මෙම විශේෂිත වීඑම් එකෙන් පිටත කිසිදු ආකාරයකින් නොනවත්වා හෝ ගෙනයන්න එපා. එහි අතේ ගෙන යා නොහැකි". එනම් ඔබට වෙනත් VM මතක අවකාශයක එහි වටිනාකම මත විශ්වාසය තැබිය නොහැක. වාෂ්පශීලී ලෙස බොහෝ දේ ඔබට නිශ්චිත මතකය සහ නූල් අර්ථ නිරූපණයන් මත විශ්වාසය තැබිය නොහැක.


14
මම හිතන්නේ transientඑය මේ අවස්ථාවේ දී නිර්මාණය කර ඇත්නම් එය මූලික පදයක් නොවනු ඇත. ඔවුන් බොහෝ විට ව්‍යාඛ්‍යාවක් භාවිතා කරනු ඇත.
ජෝකිම් සෝවර්


7

මම මෙම ප්‍රශ්නයට ප්‍රතිචාර දැක්වීමට පෙර, මම ඔබට SERIALIZATION පැහැදිලි කළ යුතුය , මන්ද විද්‍යා පරිගණකයේ අනුක්‍රමිකකරණය යනු කුමක්දැයි ඔබ තේරුම් ගන්නේ නම් ඔබට මෙම මූල පදය පහසුවෙන් තේරුම් ගත හැකිය.

Serialization වස්තුවක් ජාලය / භෞතික මාධ්ය සුරකින (ගොනු, ...) මගින් මාරු කර ඇති විට, වස්තුව "serialized" කළ යුතුය. අනුක්‍රමිකකරණය බයිට් තත්ව වස්තු ශ්‍රේණිය පරිවර්තනය කරයි. මෙම බයිට් ජාලයට යවනු ලැබේ / සුරකින අතර වස්තුව මෙම බයිට් වලින් නැවත නිර්මාණය වේ.
උදාහරණයක්

public class Foo implements Serializable 
{
 private String attr1;
 private String attr2;
 ...
}

දැන් ඔබ එසේ කිරීමට අවශ්ය නම් TRANSFERT / ගැලවීම , මෙම වස්තුව ක්ෂේත්ර SO , ඔබ භාවිතා කළ හැකිය මූල පදය transient

private transient attr2;

උදාහරණයක්


6

අනුක්‍රමිකකරණය සමඟ යන සංවේදී දත්ත කිහිපයක් බෙදා ගැනීමට ඔබට අවශ්‍ය නැති විට එය අවශ්‍ය වේ.


7
ඔබට ක්ෂේත්‍රයක් අනුක්‍රමික කිරීමට අවශ්‍ය නොවන සංවේදී දත්ත හැර වෙනත් භාවිත අවස්ථා තිබේ. නිදසුනක් ලෙස, ඔබට කිසි විටෙකත් අනුක්‍රමික කිරීමට අවශ්‍ය නොවනු ඇත Thread(නිදසුනක් ලෙස @AH වෙත ණය), ඔබ එය අස්ථිර යැයි සලකුණු කරයි. කෙසේ වෙතත්, නූල් යනු සංවේදී දත්ත නොවන අතර එය අනුක්‍රමික කිරීමට කිසිදු තාර්කික අර්ථයක් නොදක්වයි (එය අනුක්‍රමික නොවේ).
glen3b

1
case glen3b මෙම නඩුව මෙම පිළිතුරෙන් බැහැර නොවේ. පෝස්ටරයේ සඳහන් කර ඇති කාරණාවලදී එය නිසැකවම අවශ්‍ය වේ.
ලෝර්න් හි මාක්විස්

3

ගූගල් අස්ථිර අර්ථයට අනුව == පවතින්නේ කෙටි කාලයක් සඳහා පමණි; අනිත්‍යයි.

දැන් ඔබට ජාවා හි ඕනෑම දෙයක් අස්ථිර කිරීමට අවශ්‍ය නම් අස්ථිර යතුරු පදය භාවිතා කරන්න.

ප්‍ර: අස්ථිර භාවිතා කළ යුත්තේ කොතැනින්ද?

පිළිතුර: සාමාන්‍යයෙන් ජාවා වලදී අපට දත්ත විචල්‍යයන්ගෙන් ලබා ගැනීමෙන් සහ එම විචල්‍යයන් ලිපිගොනු වලට ලිවීමෙන් දත්ත සුරැකිය හැක, මෙම ක්‍රියාවලිය අනුක්‍රමිකකරණය ලෙස හැඳින්වේ. දැන් අපට විචල්‍ය දත්ත ගොනුවට ලිවීම වළක්වා ගැනීමට අවශ්‍ය නම්, අපි එම විචල්‍යය අස්ථිර එකක් බවට පත් කරමු.

transient int result=10;

සටහන: අස්ථිර විචල්‍යයන් දේශීය විය නොහැක.


0

සරලව කිවහොත්, අස්ථිර ජාවා මූල පදය, ඒවායේ අස්ථිර නොවන ක්ෂේත්‍ර ප්‍රතිවිරුද්ධ කොටස් ලෙස අනුක්‍රමිකකරණය කිරීමෙන් ක්ෂේත්‍ර ආරක්ෂා කරයි.

මෙම කේත ස්නිපටයේ අපගේ වියුක්ත පංතිය BaseJob අනුක්‍රමික අතුරු මුහුණත ක්‍රියාත්මක කරයි, අපි BaseJob වෙතින් විහිදේ, නමුත් දුරස්ථ හා දේශීය දත්ත ප්‍රභවයන් අනුක්‍රමික කිරීම අවශ්‍ය නොවේ; සංවිධානයේ නම සහ සමමුහුර්ත ක්ෂේත්‍ර පමණක් අනුක්‍රමික කරන්න.

public abstract class BaseJob implements Serializable{
   public void ShouldRetryRun(){}
}

public class SyncOrganizationJob extends BaseJob {

   public String organizationName;
   public Boolean isSynced

   @Inject transient RemoteDataSource remoteDataSource;
   @Inject transient LocalDaoSource localDataSource;

   public SyncOrganizationJob(String organizationName) {
     super(new 
         Params(BACKGROUND).groupBy(GROUP).requireNetwork().persist());

      this.organizationName = organizationName;
      this.isSynced=isSynced;

   }
}

0

අස්ථිර-යතුරුපදය සඳහා සරල උදාහරණ කේතය.

import java.io.*;

class NameStore implements Serializable {
    private String firstName, lastName;
    private transient String fullName;

    public NameStore (String fName, String lName){
        this.firstName = fName;
        this.lastName = lName;
        buildFullName();
    }

    private void buildFullName() {
        // assume building fullName is compuational/memory intensive!
        this.fullName = this.firstName + " " + this.lastName;
    }

    public String toString(){
        return "First Name : " + this.firstName
            + "\nLast Name : " + this.lastName
            + "\nFull Name : " + this.fullName;
    }

    private void readObject(ObjectInputStream inputStream)
            throws IOException, ClassNotFoundException
    {
        inputStream.defaultReadObject();
        buildFullName();
    }
}

public class TransientExample{
    public static void main(String args[]) throws Exception {
        ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("ns"));
        o.writeObject(new NameStore("Steve", "Jobs"));
        o.close();

        ObjectInputStream in = new ObjectInputStream(new FileInputStream("ns"));
        NameStore ns = (NameStore)in.readObject();
        System.out.println(ns);
    }
}

0

අස්ථිර විකරණකාරකයක් සමඟ ප්‍රකාශයට පත් කරන ක්ෂේත්‍රයක් අනුක්‍රමික ක්‍රියාවලියට සහභාගී නොවනු ඇත. වස්තුවක් අනුක්‍රමිකව (ඕනෑම තත්වයක සුරකින විට), එහි අස්ථිර ක්ෂේත්‍රවල අගයන් අනුක්‍රමික නිරූපණය තුළ නොසලකා හරිනු ලබන අතර, අස්ථිර ක්ෂේත්‍ර හැර වෙනත් ක්ෂේත්‍ර අනුක්‍රමිකකරණ ක්‍රියාවලියට සහභාගී වේ. අස්ථිර යතුරු පදයේ ප්‍රධාන අරමුණ එයයි.


0

මක්නිසාද යත් සියලු විචල්‍යයන් අනුක්‍රමික කළ හැකි නොවන බැවිනි.

  1. අනුක්‍රමිකකරණය සහ දේශියකරණය සමමිතික ක්‍රියාවලීන් වන අතර, ප්‍රති result ලය තීරණය වේ යැයි ඔබට අපේක්ෂා කළ නොහැකි නම්, බොහෝ අවස්ථාවලදී, තීරණය නොකළ අගයන් අර්ථ විරහිත ය;
  2. අනුක්‍රමිකකරණය සහ ඩෙසරීකරණය යනු ප්‍රබල වේ, එයින් අදහස් කරන්නේ ඔබට අවශ්‍ය තරම් වාර ගණනක් අනුක්‍රමිකකරණය කළ හැකි අතර ප්‍රති result ලය සමාන වේ.

එබැවින් වස්තුව මතකයේ පැවතිය හැකි නමුත් තැටියේ නොවන්නේ නම්, එම වස්තුව අනුක්‍රමික කළ නොහැක, මන්ද යත්, යන්ත්‍රයට මතක සිතියම යථා තත්වයට පත් කළ නොහැකි බැවිනි. නිදසුනක් ලෙස, ඔබට Streamවස්තුවක් අනුක්‍රමික කළ නොහැක .

ඔබට Connectionවස්තුවක් අනුක්‍රමිකකරණය කළ නොහැක , මන්ද එය තත්වය දුරස්ථ අඩවිය මත ද රඳා පවතී.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.