Hier sind einige Gründe, warum es benefitial sein kann fast alles alsfinal
Schluss Konstanten
public static class CircleToolsBetter {
public final static double PI = 3.141;
public double getCircleArea(final double radius) {
return (Math.pow(radius, 2) * PI);
}
}
Dies kann dann für andere Teile des Codes verwendet wird, markiert zu haben, oder Auf diese Weise können Sie den Wert ändern, ohne ihn einzeln ändern zu müssen.
Schluss Variablen
public static String someMethod(final String environmentKey) {
final String key = "env." + environmentKey;
System.out.println("Key is: " + key);
return (System.getProperty(key));
}
}
In dieser Klasse bauen Sie eine endgültige Variable scoped, die ein Präfix zu dem Parameter environmentKey hinzufügt. In diesem Fall ist die letzte Variable nur innerhalb des Ausführungsbereichs gültig, der bei jeder Ausführung der Methode unterschiedlich ist. Jedes Mal, wenn die Methode eingegeben wird, wird das Finale rekonstruiert. Sobald es konstruiert ist, kann es im Rahmen der Methodenausführung nicht geändert werden. Auf diese Weise können Sie eine Variable in einer Methode für die Dauer der Methode fixieren. siehe unten:
public class FinalVariables {
public final static void main(final String[] args) {
System.out.println("Note how the key variable is changed.");
someMethod("JAVA_HOME");
someMethod("ANT_HOME");
}
}
Schluss Konstanten
public double equation2Better(final double inputValue) {
final double K = 1.414;
final double X = 45.0;
double result = (((Math.pow(inputValue, 3.0d) * K) + X) * M);
double powInputValue = 0;
if (result > 360) {
powInputValue = X * Math.sin(result);
} else {
inputValue = K * Math.sin(result); // <= Compiler error
}
Diese sind besonders nützlich, wenn Sie wirklich lange Schlangen von Codes haben, und es wird Compiler-Fehler erzeugen, so dass Sie nicht laufen in der Logik/Geschäftsfehler, wenn jemand versehentlich Variablen ändert, die nicht geändert werden sollen.
Schluss Kollektionen
Verschiedene Fall, wenn wir über Kollektionen sprechen, müssen Sie sie als unveränderbar setzen.
public final static Set VALID_COLORS;
static {
Set temp = new HashSet();
temp.add(Color.red);
temp.add(Color.orange);
temp.add(Color.yellow);
temp.add(Color.green);
temp.add(Color.blue);
temp.add(Color.decode("#4B0082")); // indigo
temp.add(Color.decode("#8A2BE2")); // violet
VALID_COLORS = Collections.unmodifiableSet(temp);
}
sonst, wenn Sie es nicht als unveränderbar festgelegt:
Set colors = Rainbow.VALID_COLORS;
colors.add(Color.black); // <= logic error but allowed by compiler
Finale Klassen und Schluss Methoden nicht bzw. erweitert oder überschrieben werden.
EDIT: UM DAS FINAL CLASS PROBLEM IN BEZUG AUF ENCAPSULATION Adresse:
Es gibt zwei Möglichkeiten, um eine Klasse endgültig zu machen. Die erste ist das Schlüsselwort final in der Klassendeklaration zu verwenden:
public final class SomeClass {
// . . . Class contents
}
Die zweite Möglichkeit, eine Klasse final ist zu erklären, alle seine Konstrukteure als privat zu machen:
public class SomeClass {
public final static SOME_INSTANCE = new SomeClass(5);
private SomeClass(final int value) {
}
es letzte Markierung spart das Problem, wenn Sie herausfinden, dass es sich wirklich um ein Finale handelt, um einen Blick auf diese Testklasse zu werfen. sieht auf den ersten Blick öffentlich aus.
Da der einzige Konstruktor der Klasse privat ist, ist es leider nicht möglich, diese Klasse zu erweitern. Im Fall der Testklasse gibt es keinen Grund, dass die Klasse endgültig sein sollte. Die Klasse Test ist ein gutes Beispiel dafür, wie implizite finale Klassen Probleme verursachen können.
Also sollten Sie es endgültig markieren, wenn Sie implizit eine Klasse endgültig machen, indem Sie es Konstruktor privat machen.
Siehe http://stackoverflow.com/questions/137868/using-final-modifier-whene-applicable-in-java –