在这个代码示例中我应该给一个变量啥修饰符?
Posted
技术标签:
【中文标题】在这个代码示例中我应该给一个变量啥修饰符?【英文标题】:what modifiers should I give a variable in this code example?在这个代码示例中我应该给一个变量什么修饰符? 【发布时间】:2012-07-19 23:44:24 【问题描述】:在下面的代码示例中,我应该给变量label
提供什么修饰符?
我是 Java 新手,但我想做的第一件事就是分解出我可以在 swing 中使用的所有类,比如 JLabel 并制作它,以便我可以动态调用它们。我希望我在下面做到了。但是,是的,我不确定private static JLabel label;
,因为最终我希望能够在某处的主文件中声明所有摇摆类。谢谢。
package base;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class CreateLabel extends JLabel
private static final long serialVersionUID = 1L;
private static JLabel label;
public Component createLabel(JFrame frame, String text)
label = new JLabel(text);
return frame.getContentPane().add(label);
【问题讨论】:
如果您打算从另一个类初始化它,那么只公开和静态就可以了。您可以使用 setter 方法,但它相当没有意义。 为什么CreateLabel
扩展JLabel?看起来您将继承与 Builder 模式混淆了
我的第一个问题是为什么?你为什么要扩展 JLabel 来做到这一点?你打算创建一个工厂类吗?那么你会希望 createlabel 不扩展任何东西,是最终的,并且 createLabel 方法是静态的。理想情况下,您也永远不会引用它...
为什么createLabel
需要存储在CreateLabel
的label
中?
忽略@tommo 的评论。除了常量之外,我在这里看不到任何应该是静态的。
【参考方案1】:
我的理解是,你希望你的createLabel()
方法添加一个JLabel
来传递JFrame
。你可以做的是:
public class LabelCreator /*extends JLabel*/
/*private static final long serialVersionUID = 1L;*/
/*private static JLabel label;*/
public Component createLabel(JFrame frame, String text)
JLabel label = new JLabel(text);
return frame/*.getContentPane()*/.add(label);
注意更改类名以尊重命名约定。
【讨论】:
谢谢你,这也很好。你为什么说将类名从 CreateLabel 更改为 LabelCreator 呢?谢谢。 @JoJo:因为类名应该是名词。方法应该是动词。另外,如果有效,您应该接受答案。 我也不确定您为什么要将框架传递给 create 方法。这意味着标签总是被添加到内容窗格的中心,这几乎不是您真正想要的。 @JohnGardner:因为OP的方法就是这样。 @JoJo,是的。您正在混合几件事:控件的创建及其布局。我想你会想要在任何框架中放置多个控件...以上是关于在这个代码示例中我应该给一个变量啥修饰符?的主要内容,如果未能解决你的问题,请参考以下文章
区分成员变量和类变量,this关键字,封装,静态方法和静态代码块,通通给我看懂(概念版) 后续有相关示例
区分成员变量和类变量,this关键字,封装,静态方法和静态代码块,通通给我看懂(概念版) 后续有相关示例
区分成员变量和类变量,this关键字,封装,静态方法和静态代码块,通通给我看懂(概念版) 后续有相关示例