哪个是首选,为什么?
JLabel.RIGHT
或
SwingConstants.RIGHT
?
编辑
感谢您的及时回复,虽然我的问题得到了解答,但它提出了另一个问题(与我最初的问题直接相关)。如果其中一个是“首选”,为什么要允许另一个?
JLabel jlabel = new JLabel("JLabel",JLabel.RIGHT); // my preference
JLabel jlabel = new JLabel("JLabel",SwingConstants.RIGHT);
最佳答案
两者都有效,但是
SwingConstants.RIGHT
是首选。
原因:
RIGHT
在SwingConstants
中声明并继承自SwingConstants
。- 如果
JLabel
还声明一个名为RIGHT
的字段,它将隐藏从SwingConstants
继承的字段,事情可能会变得疯狂,因为它甚至可能有不同的类型、可见性,当然还有值(value)。
一般来说,最好不要继承类或实现其唯一目的是收集常量的接口(interface)。
但即使这样做,也请始终通过定义它们的类名来引用它们,以避免稍后在将新字段添加到同名子类时引入意外错误。
看这个例子:
class Main implements SwingConstants {
public static void main(String[] args) {
System.out.println(RIGHT); // Prints 4
}
}
还有这个:
class Main implements SwingConstants {
private static final int RIGHT = 3;
public static void main(String[] args) {
System.out.println(RIGHT); // Prints 3
}
}
我们的字段隐藏 SwingConstants.LEFT
,它甚至具有相同的类型int
(也可以是不同的类型)。当类型相同时,祝你好运,跟踪由此类隐藏引起的错误,并且不会出现编译时或运行时错误。
关于java - Swing 常数与组件常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646790/