簡體   English   中英

我應該在方法參數中還是在 Java 的父構造函數中傳遞 object

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM