0
我有3个文件,有点像这样:通用双功能的参数
public class AConfig {
BConfig bConfig; //assume initialized
private B getA() {
return bConfig.getB(this::pickWhich);
}
public <T> Wrapper<T> pickWhich(T a, T b) {
//logic to decide whether to return a or b that doesn't actually use a or b
//store a or b in c
return new Wrapper<>(c);
}
}
。
public class BConfig {
CConfig cConfig; //assume initialized
B b1, b2; //assume initialized
public <T> B getB(BiFunction<T, T, Wrapper<T>> function) {
C c = cConfig.getC(function);
return createB(function.apply(b1, b2), c);
}
private B createB(Wrapper<B> b, C c) {
//...
}
}
。
public class CConfig {
C c1, c2; //assume initialized
public <T> C getC(BiFunction<T, T, Wrapper<T>> function) {
return createC(function.apply(c1, c2));
}
public C createC(Wrapper<C> c) {
//...
}
}
我想要做的就是它,所以我可以传承的功能和这两种方法getB和GETC使用它,但我的申请得到括号错误说“申请(T,T)在BiFunction中不能应用于(B,B)“并且在getC中具有相同的错误,但是具有”(C,C)“。
我知道如果我改变getB到
public B getB(BiFunction<B, B, Wrapper<B>> function) {
C c = cConfig.getC(function);
return createB(function.apply(b1, b2), c);
}
它会正常工作,但我无法通过GETC呼叫下传功能。
有什么办法保持函数的通用性,以便它可以在两种方法中使用?
你可以添加的'''createB''声明'和'''createC'''的问题? –
此外代码没有反映出那些缺少局部变量(b1,b2,c1,c2)的类型,我猜他们是B和C,但你应该明确的。 –
添加了更多上下文。 – Grantapher