[英]Automatic function calling in Java
我正在研究 Java 中的 3D 游戲引擎的事件系統。 每種類型的事件都有自己的界面。 每次創建實現該接口的 object 時,我都想執行某些操作。 我知道接口不能有構造函數,但有什么方法可以執行這些操作嗎? 我不想在實現這些接口的類中執行這些操作,而且我不能將它們作為抽象類,因為每個 class 只能從一個父 class 擴展。
也許這個 apoarch 可以幫助:
public interface Action {
void perform();
}
public interface Foo {
final static Action action = new FooAction();
}
public interface Bar {
final static Action action = new BarAction();
}
public class FooAction implements Action, Foo {
public FooAction() {
}
@Override
public void perform() {
System.out.println("Performing FooAction");
}
}
public class BarAction implements Action {
public BarAction() {
}
@Override
public void perform() {
System.out.println("Performing BarAction");
}
}
public class FooFighter implements Foo {
public FooFighter() {
System.out.println("FooFighter");
action.perform();
}
}
public class BarFighter implements Bar {
public BarFighter() {
System.out.println("BarFighter");
action.perform();
}
}
public class FighterTest {
public void perform() {
FooFighter fooFighter = new FooFighter();
BarFighter barFighter = new BarFighter();
} // perform
public static void main(String[] args) {
FighterTest self = new FighterTest();
self.perform();
}
}
Action 是接口上特定操作的通用句柄。 Foo 和 Bar 是持有特定動作處理程序類 FooAction 和 BarAction 的特定接口。
戰斗機類實現該特定接口並通過其構造函數中接口 Action 的方法 action.perform 觸發特定操作。 必須執行此調用,因為這是實例化請求的操作 class 的觸發器。 正如您在 FighterTest 中看到的那樣,其中實例化了兩個對象,每種類型一個。
此樣品的 output 是
FooFighter
Performing FooAction
BarFighter
Performing BarAction
正如我在評論中已經說過的那樣,當構造函數被開箱即用時,您無法自動執行任何代碼。 您基本上需要一些裝飾,即包裝您的構造函數並自動執行操作的代碼。
為此,有幾個選項,例如:
<T extends YourSpecialInterface> T createInstance(Class<T> type)
這樣的工廠方法,這可能需要額外的配置或使用反射(注意:只有在你真的知道自己在做什么時才使用反射)。您選擇哪個選項取決於幾個因素:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.