我正在尝试制作一个服务器系统,但遇到了问题。我有一个名为 RType 的枚举和关联的类:
package net.typho.utils;
public enum RType {
STRING(String.class), INTEGER(Integer.class), BOOLEAN(Boolean.class);
private Class<?> dataType;
RType(Class<?> dataType) {
this.dataType = dataType;
}
public Class<?> getDataType() {
return dataType;
}
}
(这三个只是占位符,以确保其正常工作) 我想创建一个需要 RType 的构造函数,以及与 rtype 的 dataType 属于同一类的内容。我可以让它抛出一个错误,但我希望 IntelliJ Idea 在我将错误的类作为数据时标记它。有人可以帮我解决这个问题吗?谢谢你
Java 枚举的值始终都是相同的类型。
如果你想要一个“异构枚举”,你必须自己构造它:
public final class RType<T> {
public static final RType<String> STRING = new RType<>(String.class);
public static final RType<Integer> INTEGER = new RType<>(Integer.class);
public static final RType<Boolean> BOOLEAN = new RType<>(Boolean.class);
private RType(Class<T> dataType) {
this.dataType = dataType;
}
public Class<T> getDataType() {
return dataType;
}
}
将类设为 Final 并将构造函数设为私有意味着它不能在类外部构造,因此存在的
RType
的唯一实例是 STRING
、INTEGER
等引用的实例。
无论如何,枚举基本上只是一堆公共静态最终成员,尽管它有一些额外的秘密武器使其更加枚举。
然后,您可以像您所描述的那样声明一个构造函数:
class YourClass<T> {
YourClass(RType<T> rtype, T instance) { ... }
}