【发布时间】:2016-08-29 21:43:39
【问题描述】:
假设存在以下类:
public class Foo extends Spam{
public void bar(){};
//...many more useful functions...
}
我现在需要这个:
public class Fooish extends Foo{
public static boolean whichDelegate; //true for 1, false for 2
Foo delegate1;
Foo delegate2;
}
有没有办法让 java 自动委托调用?
在查看了关于 SO 的许多其他回复后,我看到了三种可能的方法,但似乎都不适用于我的特定用例:
-
Just override everything and do the switching logic yourself
问题在于 Foo 是一个变化很大的类。这样做意味着每次更改 Foo 时,也必须更改 Fooish。
更糟糕的是,如果它没有被改变并且函数 egg() 被添加到 Foo 中,Fooish 会调用 Eggs 本身而不是它的代表。混乱...
-
我希望能够做到这一点,但 Foo 是一个具体的类,将其功能提升到接口似乎是不可能的。我无法触摸垃圾邮件。
-
具有显着的性能影响,其他人难以理解。 eclipse 可能无法找到对代表的调用,这将损害可维护性。似乎是最好的选择,但对于应该有编译时解决方案的东西来说似乎很烦人。
我还找到了this,但它是在 C# 中的
【问题讨论】:
-
为什么不让两个不同的类代表两种不同的方式,然后在代码的更高级别选择使用哪一个呢?现代 Java IDE 会自动生成委托代码,因此跟上 Foo 的变化应该不会太烦人..