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 は ProxyDataObject ではなく ServerDataObject を拡張します。定義した継承により、ServerDataObject のインスタンスが ProxyDataObject ではない可能性があります。したがって、表示されているエラーが発生します。

于 2012-12-12T22:31:09.237 に答える