我觉得我在这里错过了一些令人眼花缭乱的东西,这对于Java大师来说是如此低沉的成果:
我的代码如下:
private static void myFunc(JComponent c) {
if (c instanceof JPanel) {
//stuff
}
else if (c instanceof JMenu) {
// other stuff
}
}
即使JPanel和JMenu都是JComponent的子类,第一个instanceof
也会出错:
Incompatible conditional operand types JComponent and JPanel
虽然第二个工作正常。为什么它认为我的JComponent
永远不会是JPanel
?
答案 0 :(得分:6)
我怀疑你是从某个地方导入另一个JPanel。对于分钟,请尝试使用完全限定类型:
private static void myFunc(javax.swing.JComponent c) {
if (c instanceof javax.swing.JPanel) {
//stuff
}
}
除此之外,我无法想到它不会编译的任何理由......如果你能提出一个简短而完整的程序来证明这个问题,那会有所帮助。编译好了:
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");
}
}
}
答案 1 :(得分:1)
我会仔细检查进口货物。
您确定已导入了所需的JPanel
和JComponent
课程吗?
它们是以下吗?
import javax.swing.JPanel;
import javax.swing.JComponent;
答案 2 :(得分:1)
使用此:
if(javax.swing.JPanel.isInstance(c)){
答案 3 :(得分:1)
以下代码编译良好:
import javax.swing.*;
class Panel
{
private static void myFunc(JComponent c) {
if (c instanceof JPanel) {
//stuff
} else if (c instanceof JMenu) {
// other stuff
}
}
}