我扩展了这样的课程:
public class JDateTextField extends JTextField {...}
在新的 JDateTextField 上调用 instanceof JTextField 将返回“true”,因为它是从该类扩展而来的。
我想知道是否有解决办法,因此返回“false”。下面的解决方案很快就会变得丑陋,特别是当扩展类的数量增加时:
JDateTextField dateTextField = new JDateTextField;
if (dateTextField instanceof JTextField
&& !(dateTextField instanceof JDateTextField)) {...} // returns false and skips the 'if', which is the intended behavior
是否有一个简单的解决方案可以有效地覆盖扩展类的instanceof返回类型?结果以下也将返回 false:
JDateTextField dateTextField = new JDateTextField;
if (dateTextField instanceof JTextField {...}
按照@AndyTurner的建议,重新排序if检查。基本示例:
public class JTextFieldNew extends JTextField {
public JTextFieldNew(String placeholder, int columns) {
super(placeholder, columns);
}
public static void main(String[] args) {
JPanel panel = new JPanel();
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
panel.add(new JTextField());
} else {
panel.add(new JTextFieldNew("", 1));
}
}
Component[] components = panel.getComponents();
for (Component component : components) {
if (component instanceof JTextFieldNew) {
System.out.println("JTextFieldNew");
// handle JTextFieldNew
} else if (component instanceof JTextField) {
System.out.println("JTextField");
// handle JTextField
}
}
}
}