使用接口和泛型在Java中绘制按钮

使用接口和泛型在Java中绘制按钮,java,generics,interface,Java,Generics,Interface,Java项目包含绘制“编辑”按钮的方法。你能解释一下在这里使用接口的好处吗?一个界面能做什么一个更简单的JBotton按钮=newjbutton()不能 private ValueObject<?> getButtonValueObject() { ValueObject<?> buttonValue = new MutableValueObject<Object>() { private String title =

Java项目包含绘制“编辑”按钮的方法。你能解释一下在这里使用接口的好处吗?一个界面能做什么一个更简单的
JBotton按钮=newjbutton()不能

private ValueObject<?> getButtonValueObject() {
        ValueObject<?> buttonValue = new MutableValueObject<Object>() {
            private String title = "Edit"; 

            @Override
            public Object getValue() {
                return new AbstractAction(title) {   
                    public void actionPerformed(ActionEvent e) {
                        final JDialog dialog = new JDialog();
                        dialog.setTitle("Values");
                        dialog.setLayout(new BorderLayout());                        
                        JPanel panel = new JPanel();
                        dialog.add(panel, BorderLayout.NORTH);
                        .......

                        dialog.setVisible(true);
                    }

                    @Override
                    public String toString() {
                        return title;
                    }
                };
            }
        };
        return buttonValue;
    }


//ValueObject.java
public interface ValueObject<T> {
    T getValue();
}
private ValueObject getButtonValueObject(){
ValueObject按钮Value=新的可变ValueObject(){
私有字符串title=“编辑”;
@凌驾
公共对象getValue(){
返回新的抽象操作(标题){
已执行的公共无效操作(操作事件e){
最终JDialog对话框=新建JDialog();
对话框。设置标题(“值”);
setLayout(新的BorderLayout());
JPanel面板=新的JPanel();
添加(面板,BorderLayout.NORTH);
.......
对话框.setVisible(true);
}
@凌驾
公共字符串toString(){
返回标题;
}
};
}
};
返回按钮值;
}
//ValueObject.java
公共接口ValueObject{
T getValue();
}

此代码中有很多问题,更不用说它只是使问题过于复杂。有一个主体被称为,这类代码与之背道而驰

一些问题和细节:

  • 不使用任何自定义的私有方法抽象(在发布的代码中)
  • 不推荐使用匿名(内部)类
其他不良做法:

  • 应该是私有字符串title=“Edit”多变?否->为什么不是静态最终
  • dialog.setTitle(“值”)包含硬连线字符串
  • 名称不表示“ValueObject”、“MutableValueObject”的用途

TL.DR:不是泛型的好例子。尽量保持源代码的简单易读。这似乎与上下文无关,因此很难解释。你没有可以参考的项目文档吗?@Thomas没有。你能举几个这样的接口有用的例子吗。如果它们只与这个案例有远程关联,这是可以的。如果没有更多的上下文,很难定义“这样”的接口,因此我不能提供这方面的示例。我可以提供一个例子,说明接口在什么时候以及为什么在一般情况下是有用的,但是网络上已经有很多这样的接口了。我想我会选择“个人偏好”/“无法用提供的细节回答”“顾问”听起来像是一个测试/练习。如果是这样的话,你可能想在你的问题中添加这个细节。此外,我还对设计提出了质疑,即“ValueObject”表示正在处理某种值,但您发布的代码将某些Swing操作定义为返回的值。如果不知道
ValueObject
的作用是什么,很难说清楚,但我怀疑Swing动作是否是有效的值。