设计一个像Entry<K,V>这样的通用接口,可以使用另一个util类

问题描述 投票:0回答:2

我有一个实体正在从数据库获取数据。 我想创建一个接口 GenericWrapper 可供多个实体使用来获取数据。

public interface GenericWrapper<K,V> {

K getKey();
V getValue(K key);

}

还有另一个 DAO 类实现了这个接口。

@Entity
@Table(name = "KV_STORE")
class BaseDataDO implements GenericInterface<K,V>, Serializable {
  
 private K key;
 //this string is a jsonString
 private V value;

 //get Key
 @Override
 public K getKey() {
    //get First key from
 }

 //get value for a key
 @Override
 public V getValue(K key) {
   
 }

}

现在有一个实用程序类可以获取每个 BaseDataDO 的密钥

class Util<K,V> {

public static String fetchKeyFromDO(GenericInterface<K,V> dataInterface) {
    dataInterface.getKey();    
}

最后这个 util 类将从代码中的任何地方调用:

class ServiceImpl {
     
    public fetchDataFromDB() {
        BaseDataDO baseData = new BaseData();
        String key = Util.fetchKeyFromDO(baseData);
}

我收到以下编译错误: com.util.Util.this' 无法从静态上下文中引用

错误:-非静态类型变量 K、V 无法从静态上下文中引用

有人可以帮忙解决这里的问题吗?

编辑:用泛型更新了 Util 类

java inheritance interface
2个回答
0
投票

Util
不需要其泛型属性。
相反,尝试这样的事情:

class Util {

public static <K,V> String fetchKeyFromDO(GenericInterface<K,V> dataInterface) {
    dataInterface.getKey();    
}

0
投票

本声明

class Util<K,V> {

与此用法不兼容

public static String fetchKeyFromDO(GenericInterface<K,V> dataInterface) {

因为类声明中的泛型是在实例化时分配的(

new Util<int, int>().fetchKeyFromDO
),但您试图在静态方法中使用它(
Util.fetchKeyFromDO
)。所以
<K, V>
无处可来。

如果您想保持 Util 方法静态,请更改声明,以便泛型参数位于方法中,而不是类中:

class Util {

public static <K, V> String fetchKeyFromDO(GenericInterface<K,V> dataInterface) {
    dataInterface.getKey();    
}
© www.soinside.com 2019 - 2024. All rights reserved.