首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java枚举方法返回构造函数中提供的泛型类型吗?

Java枚举方法返回构造函数中提供的泛型类型吗?
EN

Stack Overflow用户
提问于 2018-05-26 19:29:53
回答 2查看 153关注 0票数 0

我希望枚举方法getValue()有一个泛型返回类型。返回的类型应与枚举的构造函数中提供的类型相同。

代码语言:javascript
复制
public enum ParameterType
{
    NUMBER(int.class),
    TEXT(String.class);

    private Class<?> classType;

    ParameterType(Class<?> _clazz)
    {
        classType = _clazz;
    }

    public <T> T getValue()
    {
        String a = "i am a text";
        int b = 42;

        return classType.cast(a);
        //return classType.cast(b);
    }
}

然而,在这种情况下,错误是“无法从捕获#3转换为T”。此外,不可能在枚举本身上提供通用的"X“类型,该类型可用于类的情况下的返回类型。

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2018-05-26 19:57:45

别管选角的事了。请为每个枚举常量重新定义‘getValue()’。

票数 0
EN

Stack Overflow用户

发布于 2018-05-26 20:53:12

您不能使用枚举做到这一点,因为枚举中的所有值都具有相同的类型。

要做到这一点,基本上必须手动构建“枚举”:

代码语言:javascript
复制
public final class ParameterType<T>
{
  public static final ParameterType<Integer> NUMBER = new ParameterType<>(42);
  public static final ParameterType<String> TEXT = new ParameterType<>("I am a text");

  private ParameterType(T value) {
    this.value = value;
  }

  public T getValue() { return value; }
}

重要的一点是使构造函数成为私有的,这样就不能在类外部调用它。这使得它有点像枚举,因为您定义的实例是唯一的实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50542274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档