泛型方法的类型推断问题

时间:2016-04-08 20:39:38

标签: java generics inference

是否可以使用弱推理解决问题,而无需为下面的代码定义其他变量或类型转换?

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>

2 个答案:

答案 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;方法它将返回它自己的类,然后你可以再次调用它。

我希望有所帮助。