Example:
interface S {}
interface SS extends S {}
abstract class A<T extends S> {
T get() {…}
}
abstract class B<BT extends SS> extends A<BT> {}
Why does ((B)someInstanceOfB).get()
return an object of type S
(and we should cast it to SS
manually), when the compiler could determine that returned object is at least of type SS
?
Why doesn't the compiler make implicit class cast to have clearer code? The code is of version 1.5+ and this is not secret for compiler. (Solved)
Update: Why doesn't the compiler compile B
class as it implicitly has method BT get() { return super.get(); }
?
Is this problem solved in Java 1.7+?