2016-04-08 5 views
3

Zitat:Definition eines konstanten Feldes in Blochs Effective Java 2nd edition

Wenn ein statisches letztes Feld eine veränderbare Referenztyp hat, kann es sein noch ein konstantes Feld, wenn das referenzierte Objekt unveränderlich ist.

Ich bin mir nicht sicher, was das bedeutet; Kann jemand ein Beispiel dafür geben?

+0

Effective Java. ** https://books.google.es/books?id=ka2VUBqHiWkC&pg=PA238&lpg=PA238&dq=%22static+final+field+has+a+mable_reference+type%22&source=bl&ots=yZIfJew4P3&sig=tvjvW3oooSNxNRaGF57ru2VwL8c&hl = es & sa = X & ved = 0ahUKEwi-1Z3S5P7LahULVxoKHRIfCToQ6AEILTAC# v = Seite & q =% 22Static% 20Final% 20Field% 20Has% 20A% 20Mutable% 20Referenz% 20Typ% 22 & f = false – Nirekin

Antwort

6

Ein Beispiel, dass Josh über List wäre spricht, das einen veränderbaren Typen (add(), remove(), etc), aber Sie können zuweisen ein unveränderlich Instanz es:

public static final List<String> NAMES = Collections.unmodifiableList(Arrays.asList("foo", "bar")); // immutable 

By the way, eine große Beispiel für etwas, das wie eine Konstante aussieht, ist aber nicht, ist eine Date Konstante:

public static final Date EPOCH = new Date(0); 

aber dann kann ein Code tun:

EPOCH.setTime(123456789); // oops! 

Date ist wandelbar! Jeder wird solch eine Veränderung sehen.

In constrast dabei ist, so etwas wie String, die ist unveränderlich:

public static final String NAME = "Agent Smith"; // immutable 
1

Sie können einen wandelbaren Typen mit einem unveränderlichen Subtyp haben:

class Mutable {} // Not immutable, because it can be extended. 

final class Immutable extends Mutable {} 

// Reference type is mutable, but referenced object is immutable. 
static final Mutable CONSTANT = new Immutable();