Der Refaktor „Umbenennung einer final-Variablen“ in Java
Man kann einen Namen einen anderen Namen ersetzen (falls dies nicht zu einer Namenskollision führt). Dazu muß man den Namen in seiner der Deklaration und an allen Stellen innerhalb des Gültigkeitsbereichs dieser Deklaration, an denen er im Sinne dieser Deklaration verwendet wird, durch den neuen Namen ersetzen.
Dies ist ein Refaktor, weil eine solche Umbenennung das Verhalten des Programms nicht verändert.
Indikation Dieser Refaktor wird verwendet, wenn der Name einer final-Variablen dem Programmierer nicht gefällt und er ihn durch einen anderen Namen ersetzen will.
Das folgende Programm enthält beispielsweise eine lokale final-Variable namens »k«.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int k = 22; java.lang.System.out.println( k ); }}java.lang.System.out
22
Das folgende gleichwertige Programm enthält eine lokale final-Variable namens »n«. Dieses Programm kann man durch eine Umbenennung der final-Variablen »k« aus dem vorigen Programm gewinnen.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int n = 22; java.lang.System.out.println( n ); }}java.lang.System.out
22
In dem folgenden Beispiel umfaßt der Gültigkeitsbereich der ersten lokale final-Variablen »i« nur einen inneren Block.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ { final int i = 3; java.lang.System.out.println( i ); }
{ final int i = 7; java.lang.System.out.println( i ); }}}java.lang.System.out
3
7
Soll die erste lokale final-Variable des obigen Programms umbenannt werden, so ist sie in der Deklaration und überall innerhalb ihres Gültigkeitsbereichs umzubenennen. Die zweite final-Variable, die ebenfalls den Namen »i« hat, ist dadurch als nicht betroffen.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ { final int k = 3; java.lang.System.out.println( k ); }
{ final int i = 7; java.lang.System.out.println( i ); }}}java.lang.System.out
3
7
Die Umbenennung macht den Unterschied zwischen Namen und Literalen deutlich: Während ein Name verändert werden kann, ohne daß sich dadurch sein Wert ändern muß, wird der Wert eines Literals aus seiner Schreibweise abgeleitet, weswegen die Schreibweise eines Literals im allgemeinen nicht verändert werden kann, ohne dabei auch den Wert des Literals zu ändern. Ein Literal gibt einen Wert durch die Zeichen an, aus denen es besteht. Es kann nicht wie ein Name „umbenannt“ werden.
Übungsfragen
? Anwendung des Refaktors „Umbenennung einer final-Variablen“
Wurde der Refaktor „Umbenennung einer final-Variablen“ beim Übergang zwischen den beiden folgenden Programmen richtig angewendet? Begründen Sie ihre Antwort!
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int n = 4;
java.lang.System.out.println( n + 1 ); }}Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int i = 4;
java.lang.System.out.println( n + 1 ); }}
Übungsaufgaben
/ Anwendung des Refaktors „Umbenennung einer final-Variablen“
Überarbeiten Sie das folgende Programm so, daß jede final-Variable einen eigenen Namen hat!
(Hierzu dürfen nur Umbenennungen von final-Variablen vorgenommen werden. Die Ausgabe des Programms soll sich nicht verändern.)
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ { final double v = 3.2; java.lang.System.out.println( v ); }
{ final int v = 7; java.lang.System.out.println( v ); }
{ final java.lang.String v = "string"; java.lang.System.out.println( v ); }}}Protokoll
3.2
7
string
/ Anwendung des Refaktors „Umbenennung einer final-Variablen“
Überarbeiten Sie das folgende Programm so, daß alle final-Variablen denselben Namen haben!
(Hierzu dürfen nur Umbenennungen von final-Variablen vorgenommen werden. Die Ausgabe des Programms soll sich nicht verändern.)
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ { final java.lang.String text0 = "Computertastaturen"; java.lang.System.out.println( text0 ); }
{ final java.lang.String text1 = "Datenverarbeitungen"; java.lang.System.out.println( text1 ); }
{ final java.lang.String text2 = "Haupthimmelsrichtungen"; java.lang.System.out.println( text2 ); }}}Protokoll
Computertastaturen
Datenverarbeitungen
Haupthimmelsrichtungen
/ Anwendung des Refaktors „Umbenennung einer final-Variablen“
Überarbeiten Sie das folgende Programm so, daß alle final-Variablen denselben Namen haben!
(Hierzu dürfen nur Umbenennungen von final-Variablen vorgenommen und geschweifte Klammern eingefügt werden. Die Ausgabe des Programms soll sich nicht verändern.)
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final double x0 = 3.1; java.lang.System.out.println( java.lang.Math.sin( x0 ));
final double x1 = 2.7; java.lang.System.out.println( java.lang.Math.sin( x1 ));
final double x2 = 1.8; java.lang.System.out.println( java.lang.Math.sin( x2 )); }}Protokoll
0.04158066243329049
0.4273798802338298
0.9738476308781951