Προς το περιεχόμενο

java


johnys20

Προτεινόμενες αναρτήσεις

Δημοσ.

Μετατροπή των immutable (αμετάβλητων) κλάσεων (Integer, Float, Double, Byte,

Long, Boolean, Short) της γλώσσας προγραμματισμού java σε κανονικές κλάσεις. -

Απαιτεί την τροποποίηση του κώδικα της γλώσσας προγραμματισμού Java.ΟΠΟΙΟΣ ΜΠΟΡΕΙ ΝΑ ΒΟΗΘΗΣΕΙ

Δημοσ.

H java έχεις κάποιες wrapper classes για τις primitive variables . Επομένως για int έχεις την Integer,για boolean την Boolean κοκ. Οι κλάσεις αυτές έχουν το απλό ιδίωμα ότι μετά το initialization δεν μπορείς να αλλάξεις την τιμή και λέγονται immutable . Όλες αυτές οι κλάσεις είναι final επομένως δεν μπορούν να γίνουν extend και τα private member τους είναι final και δεν μπορεις να αλλάξεις τιμή άσχετως φυσικά ότι δεν έχουν και τον ανάλογο setter. Το boxing , unboxing είναι χειροκίνητες διαδικασίες που στην ουσία unbox παίρνεις την εμπεριεχόμενη τιμή απο την δική της wrapper κλάση και το boxing το ανάποδο. To autoboxing το κάνει αυτόματα ο compiler και δεν αφορά εσένα και γενικότερα δεν θα ασχοληθείς με αυτό.

 

Επομένως μετά την εισαγωγή ας μπούμε στο ζουμί. Φυσικά δεν πειράζεις τίποτα και υλοποιείς τις δικές σου mutable κλάσεις . Βασικά στοιχεία είναι ότι πλέον δεν χρησιμοποιείς final member variables αλλά απλά private και χρησιμοποιείς τους ανάλογους setters για την μεταβλητή.

 

Δείγματα των κλάσεων που ζητάς μπορείς να βρεις στα παρακάτω φυσικα μην περιμένεις autoboxing

 

Boolean

Short

Integer

Long

Double

Δημοσ.

H java έχεις κάποιες wrapper classes για τις primitive variables . Επομένως αντί για int έχεις την Integer,αντι για boolean την Boolean κοκ. Οι κλάσεις αυτές έχουν το απλό ιδίωμα ότι μετά το initialization δεν μπορείς να αλλάξεις την τιμή και λέγονται immutable . Όλες αυτές οι κλάσεις είναι final επομένως δεν μπορούν να γίνουν extend και τα private member τους είναι final και δεν μπορεις να αλλάξεις τιμή άσχετως φυσικά ότι δεν έχουν και τον ανάλογο setter. Το boxing , unboxing είναι χειροκίνητες διαδικασίες που στην ουσία unbox παίρνεις την εμπεριεχόμενη τιμή απο την δική της wrapper κλάση και το boxing το ανάποδο. To autoboxing το κάνει αυτόματα ο compiler και δεν αφορά εσένα και γενικότερα δεν θα ασχοληθείς με αυτό.

 

Επομένως μετά την εισαγωγή ας μπούμε στο ζουμί. Φυσικά δεν πειράζεις τίποτα και υλοποιείς τις δικές σου mutable κλάσεις . Βασικά στοιχεία είναι ότι πλέον δεν χρησιμοποιείς final member variables αλλά απλά private και χρησιμοποιείς τους ανάλογους setters για την μεταβλητή.

 

Δείγματα των κλάσεων που ζητάς μπορείς να βρεις στα παρακάτω φυσικα μην περιμένεις autoboxing

 

Boolean

Short

Integer

Long

Double

σε ευχαριστω πολυ αυτεσ ειναι μεταβλητεσ κλασεισ ε?

Δημοσ.

σε ευχαριστω πολυ αυτεσ ειναι μεταβλητεσ κλασεισ ε?

 

Ναι αν ψάξεις πχ την Boolean immutable κλάση θα δεις το ακόλουθο που περιέχει την λέξη final

 

> private final boolean value;

 

ενώ η παραπάνω απο το link έχει την αντίστοιχη δήλωση ως

 

> /** The mutable value. */
   private boolean value;

 

Επίσης στην immutable κλάση δεν υπάρχει setter εφόσον φυσικά δεν έχει νόημα αλλά αυτή στο link έχει τα ακόλουθα

 

>
 /**
    * Sets the value.
    * 
    * @param value
    *            the value to set
    */
   public void setValue(boolean value) {
       this.value = value;
   }

   /**
    * Sets the value from any Boolean instance.
    * 
    * @param value
    *            the value to set
    * @throws NullPointerException
    *             if the object is null
    * @throws ClassCastException
    *             if the type is not a {@link Boolean}
    */
   public void setValue(Object value) {
       setValue(((Boolean) value).booleanValue());
   }

 

 

Επομένως όταν έχεις immutable κλάση γράφεις τα εξής ...

 

 

>Integer i = new Integer(10) ;
Integer j = i ; // Βλέπουν τα ίδια
j=30;   // Autoboxing o compiler το μετφράζει ως-- > j= Integer.valueOf(30);

 

Σε αυτό το σημείο i = 10 και j = 30

 

 

Με την mutable έχεις τα εξής

 

>MutableInteger i= new MutableInteger(10);
MutableInteger j=i; //Βλέπουν τα ίδια 
j.setValue(30);    

 

Σε αυτό το σημείο i=30 και j = 30

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...