java - 如何解决一般递归约束问题?

标签 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,

也许这个问题是由泛型类型的递归边界引起的。对吗?

引用文献: Generics compiles and runs in Eclipse, but doesn't compile in 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
}

最佳答案

这意味着输入 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)

关于java - 如何解决一般递归约束问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12910053/

相关文章:

java - 如何将动态创建的实例用作 Spring Autowiring 中的 bean

c# - 为什么泛型上的 ToString() 有方括号?

java - 当下拉列表选择时如何从网站抓取数据?

java - 将上限限制为 Java 泛型方法中给定类型之一

java - 无法为嵌套类型推断类型变量 T

java - 如何在java中动态扩展一个类?

c# - 不使用 GetMethods 获取泛型方法

java - 我对 : how Eclipse MAT displays "Unreachable" objects. 有点困惑我正在阅读两个客户转储并想跟踪无法访问的对象

Java:关于调用 Runtime.freeMemory()、Runtime.totalMemory() 和 Runtime.maxMemory() 的成本

Java长正则表达式