[英]Should I pass object in method parameter or in parent constructor in Java
我有一個無法解決的難題。 在這種情況下,我應該在方法參數或父構造函數中傳遞 object 嗎?
第一個想法:
public class TempChannelsPlugin extends JolssyPlugin {
private JDA client;
private TempChannelsListener listener;
private JdaCommandManager jdaCommandManager;
@Inject
public TempChannelsPlugin(JDA client, JdaCommandManager jdaCommandManager, TempChannelsListener listener) {
super(Category.UTILITIES, "Temporary Channels");
this.client = client;
this.jdaCommandManager = jdaCommandManager;
this.listener = listener;
}
@Override
protected void setup() {
this.registerListener(this.client, this.listener);
}
}
在 JolssyPlugin 中:
protected void registerListener(JDA client, ListenerAdapter listenerAdapter) {
this.registerListeners(client, listenerAdapter);
}
第二個想法:
public class TempChannelsPlugin extends JolssyPlugin {
private JDA client;
private TempChannelsListener listener;
private JdaCommandManager jdaCommandManager;
@Inject
public TempChannelsPlugin(JDA client, JdaCommandManager jdaCommandManager, TempChannelsListener listener) {
super(client, Category.UTILITIES, "Temporary Channels");
this.jdaCommandManager = jdaCommandManager;
this.listener = listener;
}
@Override
protected void setup() {
this.registerListener(this.listener);
}
}
在 JolssyPlugin 中:
protected void registerListener(ListenerAdapter listenerAdapter) {
this.registerListeners(this.client, listenerAdapter);
}
這兩種情況有什么區別? 為什么我應該支持一個案例而不是另一個案例?
請注意,我正在使用 Guice 進行 DI
在我看來,如果方法registerListener(ListenerAdapter listenerAdapter)
位於TempChannelsPlugin
class 中:
protected void registerListener(ListenerAdapter listenerAdapter) {
this.registerListeners(this.client, listenerAdapter);
}
那么第二個選項作為可變private JDA client;
有一個 scope 用於整個 class。 所以不需要聲明不必要的參數,因為我們可以使用private JDA client;
在 class TempChannelsPlugin
的任何地方的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.