Skip to main content

Java Generic Invariant

Secara default sifat generic adalah invariant , yang artinya tidak boleh di subtitusi dengan subtype(class child) atau supertype(class parent) , misalnya saat kita membuat object MyClass<String>, maka tidak sama dengan MyClass<Object>, walaupun String adalah turunan dari Object , dan begitupun sebaliknya.

void doInvariant(MyClass<Object> data) {

}

Contoh:

public class DemoInvariant {

static class MyClass<T> {

private T value;

public MyClass(T value) {
this.value = value;
}

public T getValue() {
return value;
}

public void setValue(T value) {
this.value = value;
}

}

public static void doInvariant(MyClass<Object> data) {
System.out.println(data.getValue());
}

public static void main(String[] args) {
MyClass<String> strData = new MyClass<>("Halo semua...");
// doInvariant(strData); // ERROR
System.out.println(strData.getValue());

MyClass<Object> objData = new MyClass<>(3000);
// MyClass<Integer> intData = objData; // ERROR
doInvariant(objData);
}

}

Output:

Halo semua...
3000

Jadi dari program diatas, tidak ada hubungan Polimorfisme dan Inheritance di Generic Java.