Se si dispone di un riferimento finale per un oggetto Java è ancora possibile manipolarlo, ma non è possibile modificare il suo riferimento. Per esempio questo codice è perfettamente legale:
import javax.swing.JLabel;
class Test1 {
private final static JLabel l = new JLabel("Old text");
public static void main(String[] args) {
System.err.println(l.getText());
l.setText("New Text");
System.err.println(l.getText());
}
}
Ma non si può dire:
l = new JLabel("Newest Text");
Dopo la prima assegnazione a l. Si noti che si può fare questo, però:
import javax.swing.JLabel;
class Test1 {
public static void main(String[] args) {
final JLabel l;
String s = getArbitaryString(); // Assume this method returns a string
l = new JLabel(s);
System.err.println(l.getText());
}
}
questo può essere fatto perché quando l viene dichiarato che non è assegnato a nulla nemmeno nulla. Quindi ti è permesso assegnargli qualcosa una sola volta.
La stessa cosa vale per i primitivi. È possibile assegnare un valore a questo modo:
class Test1 {
public static void main(String[] args) {
final int i;
i = 2;
}
}
Ma ora non si può manipolare ulteriormente dal momento che l'unica cosa che puoi fare per tipi primitivi è quello di assegnare i valori a loro.
fonte
2009-08-08 21:17:15
La stessa cosa vale per la raccolta troppo giusta? – pramodc84
@ pramodc84: è lo stesso per tutte le variabili. La maggior parte delle collezioni sono comunque modificabili. –
Quindi, come posso cambiarlo con la riflessione? =) –