0

以下 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 的有效替代品

这对我来说没有意义。

4

2 回答 2

1

doClass是类型Class<DO>,所以doClass.newInstance()也是类型DO。你怎么可能把它投射到ProxyDataObject<DO>

于 2012-12-12T20:56:05.930 回答
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。因此,您会收到您所看到的错误。

于 2012-12-12T22:31:09.237 回答