Static Imports - Krakatau Posco

advertisement
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
BAB 7
STATIC IMPORTS
Kita seringkali mengetikkan perintah-perintah panjang dan berulang-ulang saat
melakukan coding di Java. Dalam satu source code file mungkin kita bisa
mengetikkan berkali-kali perintah System.out.println(“...”). Di java 5 kita
diberikan suatu fasilitas yang dapat mempersingkat beberapa perintah yang cukup
panjang.
Fasilitas baru ini disebut static import, karena kita sekarang di Java 5 diperbolehkan
menambahkan keyword static pada saat meng-import kelas.
import static java.lang.System.out;
public class StaticImport {
public static void main(String[] args) {
out.println("Hello \"Static Import\" World");
}
}
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
Dari contoh diatas terlihat setelah kita memakai static import maka pemanggilan
perintah println tidak lagi memakai kata System.
7.1 Aturan Static Import
Keyword static letaknya selalu di belakang keyword import.
Static import java.lang.System.out;
public class StaticImport {
public static void main(String[] args) {
out.println("Hello \"Static Import\" World");
}
}
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
Gambar 7.1 Keyword static yang ditaruh di depan akan menimbulkan error
Hanya static member (method dan variabel) yang mampu diimport.
public class TestClass {
public static int var;
public static final double PI = 3.14;
public double value;
public static void printSomething() {
System.out.println("print something");
}
public void printA() {
System.out.println("A");
}
}
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
Gambar 7.2 Saat kita akan memakai static import untuk kelas TestClass maka yang
muncul hanyalah member yang static saja.
7.2 Pemakaian Static Import untuk Static Inner
Class
Static inner class dapat di-import juga dengan memakai static import. Berikut adalah
contoh program yang melibatkan static inner class :
import static java.lang.System.out;
import static staticimport.TestStaticInnerClass.InnerClass;
import static
staticimport.TestStaticInnerClass.InnerClass.doSomething;
public class TestStaticInnerClass {
static class InnerClass {
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
InnerClass() {
out.println("Inner Class");
}
public static void doSomething(String str) {
System.out.println("do something "+str);
}
}
public static void main(String[] args) {
InnerClass inner = new InnerClass();
inner.doSomething("from object");
doSomething("direct call");
}
}
Gambar 7.3 Hasil eksekusi program TestStaticInnerClass.java
Pada contoh program diatas, kita membuat sebuah static inner class (kelas di dalam
kelas) bernama InnerClass. Di dalam InnerClass, kita mendefinisikan sebuah static
method bernama doSomething(String str).
...
static class InnerClass {
InnerClass() {
out.println("Inner Class");
}
public static void doSomething(String str) {
System.out.println("do something "+str);
}
}
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
...
Jika kita ingin mempersingkat penulisannya dalam kode program, kita bisa
memanfaatkan feature static import pada Java 5.
import static java.lang.System.out;
import static staticimport.TestStaticInnerClass.InnerClass;
import static
staticimport.TestStaticInnerClass.InnerClass.doSomething;
...
Setelah di-import dengan static import, kita bisa menghilangkan nama outer class
nya (TestStaticInnerClass), bahkan kita bisa memanggil method doSomething(…)
dengan langsung memanggil nama methodnya tanpa harus menyertakan nama outer
class maupun inner class.
7.3 Pemakaian wildcard (*) pada static import
Kita bisa memakai wildcard (*) pada import biasa yang fungsinya supaya semua
kelas dalam package yang di-import bisa dikenali. Hal yang sama berlaku pada static
import. Perbedaannya adalah pada static import, wildcard (*) berfungsi agar semua
static member dalam suatu kelas bisa dikenali. Berikut contoh programnya.
import static java.lang.Math.*;
public class Wildcard {
public static void main(String[] args) {
double val = -4.31;
System.out.println("Value : "+val);
System.out.println("Ceil : "+ceil(val));
System.out.println("Floor : "+floor(val));
System.out.println("Round : "+round(val));
System.out.println("Sqr root : "+sqrt(val));
}
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
}
Gambar 7.4 Hasil eksekusi program Wildcard.java
7.4 Static import pada enum
Enum juga bisa di-import dengan menggunakan static import. Kita tinggal
menuliskan elemen-elemen konstanta yang ada di dalam sebuah enum. Berikut
contohnya.
public enum Level {
Beginner,
Medium,
Advanced
}
import static staticimport.Level.*;
public class EnumStaticImport {
public static void main(String[] args) {
System.out.println(Beginner);
System.out.println(Medium);
System.out.println(Advanced);
}
}
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
Inline enum juga bisa di-import dengan static import. Pemakaiannya tidaklah
berbeda dengan static import untuk enum biasa.
package staticimport;
public class TestInlineEnum {
public enum Range {
SHORT,
MEDIUM,
LONG
}
}
import static staticimport.Level.*;
import static staticimport.TestInlineEnum.Range.*;
public class EnumStaticImport {
public static void main(String[] args) {
System.out.println(Beginner);
System.out.println(Medium);
System.out.println(Advanced);
System.out.println(SHORT);
System.out.println(MEDIUM);
System.out.println(LONG);
}
}
7.5 Konflik penamaan pada static import
Pemakaian static import menghadapi masalah klasik yang juga dihadapi oleh import
biasa, yaitu namespace conflict. Konflik penamaan ini agak berbeda kasus dan
penanganannya di static import.
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
import java.util.Arrays;
public class ArraySorter {
public static void sort(int[] ar) {
// ... do some sorting process
}
}
import static java.util.Arrays.sort;
import java.io.PrintStream;
import java.io.PrintWriter;
// conflict
import static staticimport.ArraySorter.sort;
public class SameMemberName {
// variable hiding
public static void printIt(PrintStream out, int toBePrint) {
out.println(toBePrint);
}
public static void main(String[] args) {
int[] array = {2,4,6,2,3};
sort(array); // ambiguous method call
for (int e : array) {
System.out.println(e);
printIt(System.out, e);
}
}
}
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
Pada kasus di atas, method sort() mengalami konflik penamaan karena ada dua buah
method sort() yang menerima parameter dengan tipe yang sama. Peringatan akan
muncul ketika dikompilasi. Kompiler akan menganggap pemanggilan method sort()
sebagai pemanggilan yang ambigu, karena ada dua buah method sort() yang identik
walaupun berada di package yang berbeda.
import static java.util.Arrays.sort;
...
// conflict
import static staticimport.ArraySorter.sort;
Jika method sort() memiliki parameter dengan tipe yang berbeda, maka yang terjadi
adalah semacam overloading. Kompiler secara otomatis akan memilih method
dengan tipe parameter yang sesuai.
Java 5 Tiger, 2007 - Cornelius Koo
Published by Elex Media Komputindo
Gambar 7.5 Pesan kesalahan kompilasi yang muncul di eclipse saat terjadi konflik
penamaan.
Download