在getclass()方法之后强制转换对象

时间:2018-11-29 09:47:10

标签: java casting

我在swing组件上有一个鼠标事件,该事件可以是2个不同的自定义类:ModelTable和Modelcompte是使用netbeans swing gui创建的swing组件,它们都扩展了JPanel。它们共享一些方法和属性。

Component source = (Component) evt.getSource();
Component panel = (Component) (source.getParent()
                                     .getParent()
                                     .getParent()
                                     .getParent()
                                     .getParent());
Class clazz = panel.getClass();
clazz.cast(panel);

当我打印面板的类时,它给了我正确的类,但是当我尝试在面板上使用该类的方法时,它找不到该方法(“方法...在组件类中不存在”) 。似乎面板仍然是Class Component ...

我想做的是:

if (panel instance of ModelTable){
    panel.setQuantity(1);
}
else if (panel instance of ModelCompte){
    panel.setQuantity(2)
}

感谢您的帮助!

// and by the way I don't know why I can't directly do this : 
(Component) panel = (Component) (evt.getsource()
                                    .getParent()
                                    .getParent()
                                    .getParent()
                                    .getParent()
                                    .getParent());      

1 个答案:

答案 0 :(得分:4)

  

似乎面板仍然是类组件...

是的。您正在执行转换,但不执行任何操作。不会更改ListView变量的编译时类型。

如果您知道要调用的方法,则大概至少知道它声明的 some 类型-因此请使用常规的非反射代码将其强制转换为该类型:

panel

如果在多个类中声明了相同的方法,则可以为该方法提供一个通用的超类,或者使它们实现一个声明该方法的接口。然后,您将转换为超类或接口,此时可以调用该方法。 (在问题中没有具体示例的情况下,很难在答案中更具体。)