Java 获取静态方法调用的左侧类?

Java 获取静态方法调用的左侧类?,java,generics,Java,Generics,有时,从静态调用中获取类型名称很有用,请参见以下示例: 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() {

有时,从静态调用中获取类型名称很有用,请参见以下示例:

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

同意。不必“告诉”超类什么子类在使用它,而是用另一种方法,在超类中声明抽象方法以供子类实现。这样,就不用一个大类来处理它的每个子类,而是将每个子类的特定代码放在子类中

如果您的问题是您希望子类实例是单独的(即使用静态方法),请考虑使用枚举。因此,您不需要对类调用静态方法,而是对枚举常量SQUARE.fun()等调用实例方法


在我看来,您试图用静态方法实现的正是面向对象编程(使用非静态方法的对象实例)的目的。看不动. 答案可能不是。为什么要这样做?什么是getLeftHandClass()?不幸的是,我以前从未听说过API,我也无法在网上找到它。。。如果您想在静态方法中获取子类的名称/类对象,则不能这样做。
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 {
}
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());
    }
}