类的Java泛型子类型在没有广泛强制转换的情况下无法传递/返回
我有一个类的Java泛型子类型在没有广泛强制转换的情况下无法传递/返回,java,generics,Java,Generics,我有一个JsonService,它有这样一个方法 <T> T readObject(String json, Class<T> clz); 但我希望强制实现标记接口JsonBean(除其他原因外,我希望能够轻松识别被视为JSON的内容,并在这些类上运行测试)的只传递类。因此,我将方法签名更改为: <T> JsonBean<T> readObject(String json, Class<? extends JsonBean<T>
JsonService
,它有这样一个方法
<T> T readObject(String json, Class<T> clz);
但我希望强制实现标记接口JsonBean
(除其他原因外,我希望能够轻松识别被视为JSON的内容,并在这些类上运行测试)的只传递类。因此,我将方法签名更改为:
<T> JsonBean<T> readObject(String json, Class<? extends JsonBean<T>> clz);
JsonBean readObject(字符串json,类您的描述与您的代码不匹配。如果您想只传递实现标记接口的类,您需要这样的东西
<T extends JsonBean> T readObject(String json, Class<T> clz);
T读取对象(字符串json,类clz);
您甚至不需要JsonBean来接受泛型参数
现在,如果SomeBeanImpl
实现了JsonBean
,您就可以通过它,否则就不能通过。您应该只声明JsonBean
类,不要声明它为JsonBean如果您对该代码有很多问题,我想您可以通过以下方法检查实现特定接口:if(JsonBean.class.isAssignableFrom(clz));相反,您可以将其编码到接口JsonBean bean=jsonService.readObject(json,SomeBeanImpl.class);
我甚至没有想过尝试修改它……我会试试看
SomeBeanImpl bean = (SomeBeanImpl) jsonService.readObject(s,
(Class<? extends JsonBean<SomeBeanImpl>>) SomeBeanImpl.class);
<T extends JsonBean> T readObject(String json, Class<T> clz);