是否可以使用弱推理解决问题,而无需为下面的代码定义其他变量或类型转换?
public class GenericClass<T> {
public <R> R m(Class<R> cl) {
return null;
}
}
GenericClass<SomeClass> v2 = new GenericClass<SomeClass>()
.m(GenericClass.class)
.m(GenericClass.class); // <- Object cannot be converted to GenericClass<SomeClass>
答案 0 :(得分:3)
是:
*.in
我们需要解决public class GenericClass<T> {
public <R> R m(Class<? super R> cl) {
return null;
}
}
GenericClass<SomeClass> v2 = new GenericClass<SomeClass>()
.<GenericClass<SomeClass>>m(GenericClass.class)
.m(GenericClass.class);
可能是擦除类型(即泛型类型的超类型cl
)这一事实,然后我们需要告诉编译器实际类型是什么R
因为method参数仅指示超类型。
对R
的第二次调用不需要指定泛型类型,因为它是从赋值中推断出来的。
答案 1 :(得分:0)
为了在链中调用方法m,它需要返回它的类#34;这个&#34;。在你的情况下是GenericClass。这应该有用。
class GenericClass<T> {
public <R> GenericClass<T> m(Class<R> cl) {
// code to do something here
return this;
}
}
每次拨打&#34; m&#34;方法它将返回它自己的类,然后你可以再次调用它。
我希望有所帮助。