Skip to Main Content

Java Programming

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

How does this List conversion work?

Art Deco3 days ago — edited 3 days ago

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.

Comments
Post Details
Added 3 days ago
1 comment
20 views