以下Java代码无法编译。
public <DO extends ServerDataObject> ProxyDataObject<DO> convertToProxy(Class<DO> doClass) throws Exception{
if(getId()==0)return null;
ProxyDataObject<DO> proxy = (ProxyDataObject<DO>) doClass.newInstance();
proxy.setID(getId());
return proxy;
}
public interface ProxyDataObject<DO extends ServerDataObject> extends ServerDataObject, DataTransferInterface {
public void setID(int id);
@Ignore
public String getIDName();
}
给出以下信息:
绑定不匹配:DO类型不是有界参数的有效替代DO扩展了ProxyDataObject类型的ServerDataObject
这对我没有意义。
答案 0 :(得分:1)
doClass
是Class<DO>
类型,因此doClass.newInstance()
的类型为DO
。你怎么可能把它投到ProxyDataObject<DO>
?
答案 1 :(得分:0)
奇怪。使用Java 1.6.0_26为我编译好,尽管有警告。
第一个问题是您的方法签名应该是:
public <DO extends ServerDataObject> ProxyDataObject<DO> convertToProxy(
Class<? extends ProxyDataObject<DO>> doClass
) throws Exception {
if(getId()==0)return null;
ProxyDataObject<DO> proxy = doClass.newInstance();
proxy.setID(getId());
return proxy;
}
或:
public <DO extends ProxyDataObject<?>> DO convertToProxy(Class<DO> doClass) throws Exception{
if(getId()==0)return null;
DO proxy = doClass.newInstance();
proxy.setID(getId());
return proxy;
}
取决于你的实际意思。
其次,DO扩展ServerDataObject,而不是ProxyDataObject。使用您定义的继承,ServerDataObject的实例可能不是ProxyDataObject。因此,您会收到您所看到的错误。