Java 如何解决一般递归边界问题?

Java 如何解决一般递归边界问题?,java,generics,Java,Generics,我在编译代码时遇到了一些问题 $ 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, 这意味着类型D仅作为通用参数存在。例如,T可以从方法参数类persistent解析。如果将方法的签名更改为以下内容,则可以解决此

我在编译代码时遇到了一些问题

$ 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,

这意味着类型
D
仅作为通用参数存在。例如,
T
可以从方法参数
类persistent
解析。如果将方法的签名更改为以下内容,则可以解决此问题:

public static <D extends DataStore<K, T>, K, T extends Persistent> D createDataStore(Class<T> persistent, Class<D> dataStoreType, Properties properties)
publicstaticd创建数据存储(类持久化、类数据存储类型、属性)

这意味着类型
D
仅作为通用参数存在。例如,
T
可以从方法参数
类persistent
解析。如果将方法的签名更改为以下内容,则可以解决此问题:

public static <D extends DataStore<K, T>, K, T extends Persistent> D createDataStore(Class<T> persistent, Class<D> dataStoreType, Properties properties)
publicstaticd创建数据存储(类持久化、类数据存储类型、属性)

当参数类型没有为编译器提供足够的信息来推断泛型类型参数时,您可以显式地给出类型参数。对于非静态方法,您可以说
this.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
}
公共静态DS createDataStore(类

持久性)引发IOException{ 返回类的名称。createDataStore(persistent,null);//错误 }


当参数类型没有为编译器提供足够的信息来推断泛型类型参数时,您可以显式地给出类型参数。对于非静态方法,您可以说
this.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
}
公共静态DS createDataStore(类

持久性)引发IOException{ 返回类的名称。createDataStore(persistent,null);//错误 }