【发布时间】:2021-12-10 00:53:47
【问题描述】:
我的问题更像是个人的思维挑战而不是生产目的......这意味着尽管有明显更好的方法可以实现我的目标*,但我很好奇 - AND IF - 我可以这样做。
*因此我对其他方式不感兴趣。
我想在一个列表中“注册”几个类对象(Foo.class、Bar.class 等),它们共享一个从公共父类继承的公共静态方法。 然后我想遍历这个列表,并调用那个静态方法。
以下代码确实是错误的,但它至少可以显示我想要实现的目标:
======== 类定义
public class SomeGenericClass {
public abstract static String getType();
}
public class SomeSpecializedClassA extends SomeGenericClass{
public static String getType(){
return "I am of type A";
}
}
public class SomeSpecializedClassB extends SomeGenericClass{
public static String getType(){
return "I am of type B";
}
}
======== 主要
class Main{
void main(){
List<Class<SomeGenericClass>> classes = new ArrayList<Class<SomeGenericClass>> ();
classes.add(SomeSpecializedClassA.class);
classes.add(SomeSpecializedClassB.class);
for((SomeGenericClass.class)Class c : classes){
System.out.println(c.getMethod("getType", null).invoke(null, null));
}
}
}
========
有什么想法吗?
【问题讨论】:
-
没有抽象的静态方法。
-
试试这个库asm.ow2.io
-
试试这个库asm.ow2.io lombok 等工具使用这个库将方法注入到类中。相关的 Maven 存储库。 mvnrepository.com/artifact/asm/asm/3.3.1
-
您无需做太多事情即可使您的代码正常工作。而不是
abstract在调用SomeGenericClass.getType()时抛出异常。现在为您的其他类返回类型。静态方法不会被继承,但是在子类中定义同名的静态方法会隐藏父类的方法。但总的来说,整个方法似乎是错误的。很少有充分的理由在代码中使用 getType 或 instanceof 之类的方法。
标签: java class abstract-class static-methods