Skip to main content

Java Generic Contravariant

Contravariant adalah kebalikan dari covariant , contravariant artinya kita dapat subtitusi supertype(class parent) dengan subtype(class child). Agar generic object menjadi contravariant adalah menggunakan key < ? super ChildClass > contoh MyClass<Object> , maka bisa disubtitusi menjadi < ? super String >. Contravariant bisa write read, artinya kita bisa mengubah data generic-nya, kita bisa melakukan setter & getter.

void doContravariant(MyClass<? super String> data) {

}

Contoh:

public class DemoContravariant {

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;
}
}

static void doContravariant(MyClass<? super String> data) {
System.out.println(data.getValue());
data.setValue("Happy with Java");
}

public static void main(String[] args) {
MyClass<Object> myClass = new MyClass<Object>("Hallo Bro!!!!");
MyClass<? super String> strData = myClass;

System.out.println(strData.getValue());
myClass.setValue("Demo Contravariant");
doContravariant(myClass);
System.out.println(myClass.getValue());
}

}

Output:

Hallo Bro!!!!
Demo Contravariant
Happy with Java