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