Java Generic Covariant
Walaupun sebelumnya kita sudah mengetahui bahwa secara default sifat dari type generic adalah invariant tetapi pada kondisi tertentu kita tidak harus membuat type generic selalu invariant , contohnya dengan menggunakan covariant . Covariant artinya kita dapat subtitusi subtype(class child) dengan supertype(class parent).
Agar generic object menjadi covariant adalah dengan menggunakan key < ? extends ParentClass >
, contoh MyClass<String>
, maka bisa disubtitusi menjadi < ? extends Object >
, karena dalam hal ini String adalah turunan Object. Covariant bersifat read only kita tidak bisa mengubah data generic-nya, kita hanya bisa melakukan getter.
void doCovariant(MyClass<? extends Object> data) {
}
Contoh:
public class DemoCovariant {
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 doCovariant(MyClass<? extends Object> data) {
System.out.println(data.getValue());
// data.setValue(1); // ERROR: data akan kacau jika kita memasukan value dengan type data tertentu
}
public static void main(String[] args) {
MyClass<String> dataStr = new MyClass<String>("Halo Bro!!!");
doCovariant(dataStr);
}
}
Output:
Halo Bro!!!