考虑以下代码:
class ExtType extends MyType{};
class MyClass {
MyType myField;
public <T extends MyType> T foo(Class<T> clazz) {
return (T)myField;
}
}
现在我想调用foo
方法,我可以通过两种方式做到这一点:
1种方式:
(new MyClass()).foo(ExtType.class);
2种方法:
(new MyClass()).<ExtType>foo(ExtType.class);
有趣的是,即使该方法被声明为参数化,Eclipse 也不会在 1 次调用时发出任何警告。
这是我的问题,在第一个代码片段中,哪个T
s 用于转换返回值。它是T
来自参数还是T
来自返回值?为什么如果我没有明确指定返回类型(如“1 方式”)不发出警告?