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