Die Klasse Integer
ist ein Wrapper des primitiven Typs int
(https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html). Ein Objekt wird als unveränderlich betrachtet, wenn sich sein Zustand nach der Erstellung nicht ändern kann (https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html).Final, unveränderliche Objekte sind keine Konstanten?
Was ich hier verstehe ist, dass Sie den Wert einer Integer
Variable nur ändern können, indem Sie auf ein völlig anderes Integer
Objekt verweisen.
Durch eine variable final erklären wir können die versichern folgende:
Once a final variable has been assigned, it always contains the same value. If a final variable holds a reference to an object, then the state of the object may be changed by operations on the object, but the variable will always refer to the same object.
Wieder einmal von der immutable Dokumentation:
An object is considered immutable if its state cannot change after it is constructed.
So eine letzte, würde unveränderlich Integer
nicht erlaubt werden, um seine zu ändern Wert mit allen Mitteln.
Wenn das richtig ist, warum sind wir nicht berechtigt, eine public static final Integer
Variable zu deklarieren?
Die following code deklariert eine public static final Integer
auf unterschiedliche Weise, und alle von ihnen eine Kompilierung Fehler zurück:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public class Constants {
public static final String STRING_CONSTANT = "string_constant";
public static final int INTEGER_CONSTANT = 1; // allowed
//public static final Integer INTEGER_CONSTANT = 1; // not allowed
//public static final Integer INTEGER_CONSTANT = new Integer("1"); // not allowed
//public static final Integer INTEGER_CONSTANT = Integer.valueOf(1); // not allowed
}
public static void main (String[] args) throws java.lang.Exception
{
System.out.println("STRING_CONSTANT = " + Constants.STRING_CONSTANT);
System.out.println("INTEGER_CONSTANT = " + Constants.INTEGER_CONSTANT);
}
}
Die geworfene Ausnahme ist:
Main.java:12: error: Illegal static declaration in inner class Ideone.Constants
public static final Integer INTEGER_CONSTANT = 1;
^
modifier 'static' is only allowed in constant variable declarations
1 error
Kann mir jemand erklären, warum sind wir nicht darf bitte eine public static final Integer
deklarieren?
EDIT: Ich bin interessiert zu wissen, warum public static final Integer
nicht erlaubt ist, während public static final String
und public static final int
sind, nicht über das Finden eines Codes, der kompiliert.
Ihre Frage zeigt nicht die Tatsache, dass Sie eine statische Instanz in einer inneren Klasse deklarieren möchten. ** Die Tatsache, dass Sie in dieser inneren Klasse primitive Konstante deklarieren können, intrigiert mich! ** – AxelH
Ihre Klasse 'Konstanten' ist eine nicht statische innere Klasse. Es kann keine statischen Mitglieder haben. – khelwood
Danke für Ihre Kommentare. In diesem Fall, warum können wir einen öffentlichen statischen finalen String und einen öffentlichen statischen final int deklarieren? – Bernat