1

コードをコンパイルするのにいくつか問題があります。

$ mvn clean compile 

この種のエラーのように通知してください。

[58,30] type parameters of <D,K>D cannot be determined; no unique maximal instance exists for type variable D with upper bounds DS,

たぶん、この問題は によって引き起こされrecursive bounds of generic typesます。右?

参考文献: Generics は Eclipse でコンパイルおよび実行されますが、javac ではコンパイルされません。

どうすればこれを修正できますか?

@SuppressWarnings("unchecked")
public static <D extends DataStore<K, T>, K, T extends Persistent> D createDataStore(Class<T> persistent, Properties properties) throws IOException {
    try {
        return (D) (new HBaseStore<K, T>());
    } catch (Exception e) {
        throw new RuntimeException("cannot initialize a datastore", e);
    }
}

public static <DS extends DataStore<U, P>, U, P extends Persistent> DS createDataStore(Class<P> persistent) throws IOException {
    return createDataStore(persistent, null); // ERROR
}
4

2 に答える 2

1

これは、型Dがジェネリック パラメーターとしてのみ存在することを意味します。たとえばT、メソッド引数から解決できますClass<T> persistent。メソッドの署名を次のように変更すると、この問題を解決できます。

public static <D extends DataStore<K, T>, K, T extends Persistent> D createDataStore(Class<T> persistent, Class<D> dataStoreType, Properties properties)
于 2012-10-16T08:09:30.450 に答える
0

引数の型が、コンパイラーがジェネリック型パラメーターを推測するのに十分な情報を提供しない場合は、型パラメーターを明示的に指定できます。非静的メソッドの場合は、と言いthis.<list of type parameters>methodName(...)ます。このような静的メソッドの場合、代わりにクラス名を入力しますthis

public static <DS extends DataStore<U, P>, U, P extends Persistent> DS createDataStore(Class<P> persistent) throws IOException {
    return NameOfThisClass.<DS, U, P>createDataStore(persistent, null); // ERROR
}
于 2012-10-16T09:43:10.810 に答える