我有一个实体正在从数据库获取数据。
我想创建一个接口 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 类
类
Util
不需要其泛型属性。class Util {
public static <K,V> String fetchKeyFromDO(GenericInterface<K,V> dataInterface) {
dataInterface.getKey();
}
本声明
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();
}