类的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);