Java 摆动常数与组件常数
首选哪一种?为什么Java 摆动常数与组件常数,java,swing,jlabel,Java,Swing,Jlabel,首选哪一种?为什么 JLabel.RIGHT 或 ?? 编辑 感谢您的及时回复,虽然我的问题得到了回答,但它提出了另一个问题(与我最初的问题直接相关)。如果一个是“首选”,为什么允许另一个呢? JLabel jlabel = new JLabel("JLabel",JLabel.RIGHT); // my preference JLabel jlabel = new JLabel("JLabel",SwingConstants.RIGHT); 两者都有效,但是 SwingConstan
JLabel.RIGHT
或
??
编辑 感谢您的及时回复,虽然我的问题得到了回答,但它提出了另一个问题(与我最初的问题直接相关)。如果一个是“首选”,为什么允许另一个呢?
JLabel jlabel = new JLabel("JLabel",JLabel.RIGHT); // my preference
JLabel jlabel = new JLabel("JLabel",SwingConstants.RIGHT);
两者都有效,但是
SwingConstants.RIGHT
是首选
原因:
在中声明,并从RIGHT
继承SwingConstants
- 如果
也会声明一个名为JLabel
的字段,那么它会将该字段从RIGHT
中隐藏,事情可能会变得疯狂,因为它甚至可能具有不同的类型、可见性和值SwingConstants
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
(可能是不同的类型)。如果类型相同,并且没有编译时或运行时错误,那么很幸运可以跟踪这些隐藏导致的错误
JLabel.RIGHT
或SwingConstants.RIGHT
它们都是等效的,因为实现了接口,继承了该接口定义的所有常量
如果您只想为SwingConstants
界面保存一行import
,那么您可以简单地使用JLabel。对
,所有事情都会很好
另一方面,如果您看到这样的线条:
JLabel label = new JLabel();
label.setHorizontalAlignment(JLabel.CENTER);
如果您不了解API,那么这段代码看起来可能比以下代码更不冗长,更有意义:
JLabel label = new JLabel();
label.setHorizontalAlignment(SwingConstants.CENTER);
编辑 […]虽然我的问题得到了回答,但它提出了另一个问题 (与我最初的问题直接相关)。如果一个是“首选”,为什么 允许另一个吗 我想这仅仅是因为当他们(和许多其他组件)首先实现了
SwingConstants
接口时,他们的设计选择很差。这毫无意义。这就是为什么我不太关心这个话题的原因
如果您看到这些,建议您使用SwingConstants
常量:
JLabel继承自SwingConstants,因此我将使用第一个,它更具体一些,因此在阅读代码时更有意义。(当然,如果您正在操作JLabel) 此外,我不记得在实际代码中遇到第二个,但这不是真正的论点
JLabel label = new JLabel();
label.setHorizontalAlignment(SwingConstants.CENTER);