java泛型如何在知道子类类型和超类的情况下调用子重载方法
我有一系列扩展基类的类。基类有一个方法,我们应该说:
doStuff1(int variable){ do something;}
这些课程中的每一个都有一个:
doStuff1(String string) {convert string to number and call super.doStuff1(intResult)};
在另一个类中,我有如下方法:
public void bla(Class<?> childClass, SuperClass childClassInDisguise) {
(childClass.cast(childClassInDisguise)).doStuff1(myString);
}
我无法编译此文件,因为: 方法doStuff1(myString)对于类型捕获#17未定义
我做错了什么? 这可能吗
谢谢
# 1 楼答案
编译器不知道它代表哪个类
它知道的关于这个对象的唯一线索是,它有一个只包含doStuff1(int)的超类
如果您真的想调用doStuff1(String),为什么不创建另一个包含此方法并将此方法标记为abstract的抽象子类呢。现有的子类应该扩展这个新的子类
然后在方法中添加一个通用参数,例如
通过这种方式,编译器知道对象的继承继承权,对象是包含该抽象方法的NewSubclass的子类
编辑
如果你只能编辑bla方法,试试这个
在其他已知的子类中执行相同的if条件。我知道它是硬编码的,但如果不能通过修改涉及的类来使用泛型+抽象超类,这是唯一的方法。但我还是更喜欢我的第一个建议,因为它的代码和动态更少,比如当你添加另一个子类时,你不必再次改变bla方法(多态性的力量),不像第二个建议。这更像是一个设计重建问题