在Java中为扩展类重写instanceof

问题描述 投票:0回答:1

我扩展了这样的课程:

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 {...} 
java inheritance instanceof
1个回答
0
投票

按照@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
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.