关于枚举的非常具体的问题(也许还有类型参数?)

问题描述 投票:0回答:1

我正在尝试制作一个服务器系统,但遇到了问题。我有一个名为 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 enums
1个回答
0
投票

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) { ... }
}
© www.soinside.com 2019 - 2024. All rights reserved.