java - 获取静态方法调用的左手类?

标签 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() {
        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/

相关文章:

generics - Powershell 中的自定义类型,将泛型集合作为成员

java - 使用数组覆盖 Java 泛型方法

java - 如何从无状态 session bean 获取 JSF 应用程序用户名

java - Weblogic 异常 : javax. naming.NameNotFoundException : Unable to resolve 'jdbc.payment' . Resolved 'jdbc' ;剩余名称 'payment'

java - 将 entrySet 转换为数组

delphi - 用于将枚举与字符串相互转换的通用函数

c# - 这是使用泛型方法的好方法吗?

java - 我怎样才能安全地向上转型可选?

java - 在android数据库中插入数据时出现错误

java - 简单的 OOP/私有(private)变量查询 - Java