gpt4 book ai didi

java - 在 getclass() 方法之后转换对象

转载 作者:行者123 更新时间:2023-12-01 17:47:28 24 4
gpt4 key购买 nike

我在 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);

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

我想做的是:

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());

最佳答案

Seems that panel is still of Class Component...

是的。您正在执行转换,但没有对结果执行任何操作。它不会更改 panel 变量的编译时类型。

如果您知道要调用哪个方法,大概您至少知道它声明的一些类型 - 因此使用正常的非反射代码转换为该类型:

Component source = (Component) evt.getSource();
MyPanel panel = (MyPanel) source.getParent()
.getParent()
.getParent()
.getParent()
.getParent();

如果您在多个类中声明了相同的方法,您可以为它们提供一个具有该方法的公共(public)父类(super class),或者让它们实现一个声明该方法的接口(interface)。然后,您可以转换为父类(super class)或接口(interface),此时您可以调用该方法。 (如果问题中没有具体的例子,很难让答案更具体。)

关于java - 在 getclass() 方法之后转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53536065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com