In programming language conversion from narrower to broader type is of these types:
- covariant: converting from wider (double) to narrower (float).
- contravariant: converting from narrower (float) to wider (double).
- invariant: Not able to convert.
public interface TestInterface { }
public class TestClass implements TestInterface { }
import java.util.ArrayList;
import java.util.List;
public class Test {
private List<testclass> list;
public TestInterface test() {
list = new ArrayList<testclass>();
list.add(new TestClass());
return covariant(list);
}
public TestInterface covariant(List<testinterface> ilist) {
return ilist.remove(0);
}
}
public TestInterface test() {
list = new ArrayList<testclass>();
list.add(new TestClass());
return covariant((List<testinterface>)list);
}
Test.java:11: inconvertible types
found : java.util.List<testclass>
required: java.util.List<testinterface>
return convariant((List<testinterface>)list);
^
1 error
public TestInterface test() {
list = new ArrayList<testclass>();
list.add(new TestClass());
return covariant((List<testinterface>)((List)list));
}
Note: Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
public TestInterface covariant(List<? extends TestInterface> ilist) {
return ilist.remove(0);
}
public void contravariant(List<? super TestClass> clist, TestClass c) {
clist.add(c);
}