我试图通过在base - Component类中只创建每种类型的一种方法(update,fetch)来缩短我的数据库访问代码。 要做到这一点,我需要以某种方式存储getter和setter,以便在需要时将它们附加到查询中 - 并且不要使用反射。 所以我带来了这个:
class Component{
protected final HashMap<String, Pair<Getter,Setter>> FIELDS = new HashMap<>();
public void updateInDB(){
// create update query, iterating through FIELDS (getters)
}
}
public class TestComponent extends Component {
private String color1;
protected TestComponent(String user_id) {
super(user_id);
FIELDS.put("color1", new Pair<>(this::getColor1, this::setColor1));
}
public String getColor1() {
return color1;
}
public void setColor1(String color1) {
this.color1 = color1;
}
}
Getter看起来像这样:
public interface Getter<T> {
T get();
}
设置器:
public interface Setter<T> {
void set(T value);
}
和Pair类:
public class Pair<A, B> {
private A first = null;
private B second = null;
public Pair(A first, B second) {
this.first = first;
this.second = second;
}
public A getFirst() {
return first;
}
public void setFirst(A first) {
this.first = first;
}
public B getSecond() {
return second;
}
public void setSecond(B second) {
this.second = second;
}
}
错误是: B不是功能接口,这意味着Setter接口不是功能接口。有没有可行的解决方法呢?
答案 0 :(得分:0)
让我们看看你的Pair<Getter,Setter>
。因为您没有参数化您的setter,所以期望接口方法如下所示:
void set (Object value);
但那不是setColor1
。它需要String
,而不仅仅是任何旧Object
。
现在为了使其编译,您需要向Setter
添加类型参数:
protected final HashMap<String, Pair<Getter<String>,Setter<String>>> FIELDS = new HashMap<>();