有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过构造函数传递参数

首先,我将简要介绍一些紧密耦合的类(虽然不是最坏的情况):

class setUpGUI {

   ...
   JTextField output = new JTextField();
   ...
   CountTimer ct;
   ...

   public void setOtputText(String text) {
       output.setText(text);

   public startTimer() {
      ct = new CountTimer();
   }

   ...
}

class CountTimer implements ActionListener {

    private String text = "";
    private gui = new SetUpGUI();
    ...

    @Override
    public void actionPerformed(ActionEvent e) {
        ...
        gui.setOtputText(text);
        ...
    }

我的问题是关于第二个片段(与第一个片段相比,并就其本身):

// functionally equivalent to com.google.gwt.user.client.ui.HasText
interface HasText {

    String getText();
    void setText(String text);

}

class setUpGUI {

   ...
   JTextField output = new JTextField();
   ...
   CountTimer ct;
   ...

   public void setOtputText(String text) {
       output.setText(text);

   public startTimer() {
      ct = new CountTimer(output);
   }

   ...
}

class CountTimer implements ActionListener {

    private String text = "";
    private HasText txtComp;
    ...

    CountTimer(txtComp) {
        ...
        this.txtComp = txtComp;
        ...
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        ...
        txtComp.setText(text);
        ...
    }
}

我相信第二种设计可以被认为是一种松散耦合,因为它没有使用setter,而是通过构造函数传递引用,同时定义自己的HasText接口(因为Swing似乎没有接口,而且我也没有找到具有setText()方法的JtextComponentJLabel的公共父类)。你同意吗

通过构造函数传递参数的一般态度是什么


共 (1) 个答案

  1. # 1 楼答案

    第二个示例将文本视图组件传递给实现ActionListener的类。相反,考虑一个扩展^{}的类,允许集中处理动作事件。在文本组件的特定情况下,^{}提供对聚焦文本组件和Document侦听的底层JTextComponent模型的访问。作为herehere所概述的具体示例,在整个EditorKit层次结构中使用这种预定义的操作

    周期性操作,例如响应计时器时可能发生的情况,考虑让^ {CD1>}更新文本组件的^ {CD4}};监听视图将自动更新自身以作出响应。在这种情况下,侦听器的构造函数将收到对文本组件模型的引用