为什么instanceof不能与JPanel和JComponent一起使用?

Mor*_*nar 2 java swing

我觉得我在这里错过了一些令人眼花缭乱的东西,这对Java大师来说是如此低调的结果:

我的代码看起来像这样:

private static void myFunc(JComponent c) {
        if (c instanceof JPanel) {
            //stuff
        }
        else if (c instanceof JMenu) {
            // other stuff
        }
}
Run Code Online (Sandbox Code Playgroud)

尽管JPanel和JMenu都是JComponent的子类,但第一个instanceof给出了一个错误:

Incompatible conditional operand types JComponent and JPanel
Run Code Online (Sandbox Code Playgroud)

而第二个工作正常.为什么它认为我JComponent永远不会是一个JPanel

Jon*_*eet 6

我怀疑你是从某个地方导入另一个JPanel.对于分钟,请尝试使用完全限定类型:

private static void myFunc(javax.swing.JComponent c) {
    if (c instanceof javax.swing.JPanel) {
        //stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

除此之外,我无法想到它不会编译的任何理由......如果你能提出一个简短但完整的程序来证明这个问题,那将会有所帮助.编译好:

import javax.swing.JComponent;
import javax.swing.JPanel;

public class Test {

    public static void myFunc(JComponent c) {
        if (c instanceof JPanel) {
            System.out.println("yes");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)