有时从静态调用中获取类型名称很有用,请参阅此示例:
class Base {
private static void funImpl(Class<? extends Base> type) {
...
}
public static void fun() {
fun(Base.class);
}
}
class User extends Base {
public static void fun() {
fun(User.class);
}
}
这里为每个子类声明了fun()
。那么我可以写这样的东西吗?
class Base {
private static void funImpl(Class<? extends Base> type) {
...
}
public static void fun() {
Class<?> leftHandClass = System.getLeftHandClass(); // Error: d'oh...
funImpl(leftHandClass);
}
}
class User extends Base {
}
最佳答案
同意。不必“告诉”父类(super class)哪个子类正在使用它,而是相反,并在父类(super class)中声明抽象方法以供子类实现。这样,就不用一个大类用一堆 case 语句来处理它的每个子类,而是将特定于每个子类的代码放在子类中。
如果您的问题是您希望子类实例是单例(即使用静态方法),请考虑使用枚举。因此,您不是在类上调用静态方法,而是在枚举常量上调用实例方法:SQUARE.fun() 等。
enum Foo {
SQUARE {
public String getColor() {
return "RED";
}
},
CIRCLE {
public String getColor() {
return "GREEN";
}
},
TRIANGLE {
public String getColor() {
return "BLUE";
}
};
public abstract String getColor();
public void fun() {
System.out.println("I am a " + name() + " and my color is " + getColor());
}
}
关于java - 获取静态方法调用的左手类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752866/