java不兼容的类型,Java泛型:不兼容的类型

本文讨论了在Java中使用泛型静态工厂方法时遇到的类型转换问题。当尝试通过链式调用来设置自定义类时,编译器报错。问题在于编译器无法推断泛型的具体类型。解决方案是明确指定类的实例,如`MyClass.with(this).setClass(MyCustomClass.class);`,以便编译器能够正确理解类型信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I have a generic class MyClass with a static factory method and a setter method:

public class MyClass {

public static MyClass with(Context context) {

MyClass myClass = new MyClass<>();

myClass.context = context;

return myClass;

}

public void setClass(Class extends CustomClass> customClass) {

...

}

...

}

With the setter method, user can set any class that extends from "CustomClass".

So far so good. If I do:

MyClass myClass = MyClass.with(this);

myClass.setClass(MyCustomClass.class);

It works perfectly. But if I do:

MyClass.with(this).setClass(MyCustomClass.class);

It does not compile! The compiler outputs:

Error:(44, 87) error: incompatible types: Class cannot be converted to Class extends MyCustomClass>

I don't know why it wont compile with the second option. MyCustomClass is like:

public class MyCustomClass extends CustomClass

解决方案

Please note that you got information missing between your working example and your one-liner which has compilation error.

It doesn't know the specialization. You need to do something like

MyClass.with(this).setClass(MyCustomClass.class);

so it knows you will be 'talking strings' to it.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值