bil*_*.cn 9 java typechecking java-8
创建一个类似的
public class Play {
public static void main(String[] args) throws Exception {
outer(Integer.class, inner("abc"));
}
static <C> void outer(Class<C> c, List<? super C> s){
}
static <C> List<C> inner(C c) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
它在Java 8中编译!(在Eclipse 4.5和JDK1.8_25中都有)https://ideone.com/Q9JLHP
在Eclipse中,所有的边界都被正确地推断出来,但是如何通过参数来outer捕获?Supplier<? super Integer>Supplier<String>
编辑:澄清这是Java 8特定的,并使示例不那么混乱.
Lou*_*man 10
inner("abc")可以根据编译器的判断,将其解释为Supplier任何超类型的String. - 例如,
Supplier<Object> inner = inner("abc");
Run Code Online (Sandbox Code Playgroud)
工作得很好,因为"abc"是同样的Object.这就是这里发生的事情:inner让你回归Supplier<Object>.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |