繁体   English   中英

通用方法的类型推断问题

[英]Type inference issue for generic method

是否可以在不为下面的代码定义其他变量或类型强制转换的情况下,以弱推断来解决问题?

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>

是:

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的超类型),然后我们需要告诉编译器实际类型R是什么,因为method参数仅指示超级类型。类型。

m的第二次调用不需要指定泛型,因为它是从赋值中推断出来的。

为了在链中调用您的方法m,它需要在类“ this”上返回它。 您的情况是GenericClass。 这应该工作。

class GenericClass<T> {
    public <R> GenericClass<T> m(Class<R> cl) {
        // code to do something here
        return this;
    }
}

每次对“ m”方法的调用都会返回它自己的类,然后您可以再次调用它。

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM