So has anybody got any idea why this code works?
import java.util.List;
public class Example {
<T extends Number> T test_ret_after() {
return null;
}
void test_ret() {
List<Number> list_number_ = test_ret_after();
List<String> list_string_ = test_ret_after();
List<?> list_ = test_ret_after();
}
}
There's no errors during compilation! List obviously does not extend Number! I thought it might be because of generics but all of the below fail:
import java.util.List;
public class Example {
static class Generic<T> {}
<T extends Number> T test_ret_after() {
return null;
}
void test_ret() {
Generic<String> generic_string_ = test_ret_after();
Generic<Number> generic_number_ = test_ret_after();
String string_ = test_ret_after();
Number number_ = test_ret_after(); // pass
}
}
The errors:
Example.java:13: error: incompatible types: inference variable T has incompatible upper bounds Generic<String>,Number
Generic<String> generic_string_ = test_ret_after();
^
where T is a type-variable:
T extends Number declared in method <T>test_ret_after()
Example.java:14: error: incompatible types: inference variable T has incompatible upper bounds Generic<Number>,Number
Generic<Number> generic_number_ = test_ret_after();
^
where T is a type-variable:
T extends Number declared in method <T>test_ret_after()
Example.java:15: error: incompatible types: inference variable T has incompatible upper bounds String,Number
String string_ = test_ret_after();
^
where T is a type-variable:
T extends Number declared in method <T>test_ret_after()
3 errors
I'm using javac 25.0.1.