当前位置: 首页 > 面试题库 >

如果我在编译时不知道该类,如何获取Enum的值?

岳曦
2023-03-14
问题内容

我正在尝试执行以下操作:

Class<?> cls = unknownClass;
if(cls.isEnum()){
    @SuppressWarnings("unchecked")
    Class<? extends Enum<?>> enumClass = (Class<? extends Enum<?>>) cls;
    Object val = Enum.valueOf(enumClass, "NAME1");
}

但是我收到以下错误:

Bound mismatch: The generic method valueOf(Class<T>, String) of type Enum<E> is 
not applicable for the arguments (Class<capture#5-of ? extends Enum<?>>, String). 
The inferred type capture#5-of ? extends Enum<?> is not a valid substitute for 
the bounded parameter <T extends Enum<T>>

有人可以告诉我我在做什么错吗?


问题答案:

鉴于演员表并不会 真正 检查事情,我将使用完全原始的版本:

if (cls.isEnum()){
    @SuppressWarnings("unchecked")
    Object val = Enum.valueOf(cls, "NAME1");
}

这似乎有效。完整的例子:

public class Test
{
    enum Foo
    {
        BAR, BAZ
    }


    public static void main(String[] args)
    {
        @SuppressWarnings("rawtypes")
        Class cls = Foo.class;

        if (cls.isEnum())
        {        
            @SuppressWarnings("unchecked")
            Object value = Enum.valueOf(cls, "BAR");
            System.out.println(value);
        }
    }
}


 类似资料:
  • 如果属性名称仅在运行时已知,如何读取 Kotlin 数据类实例中的属性值?

  • 该程序允许用户以年数输入贷款金额和贷款期限。 每月和总付款应以1/8的利率递增显示。到目前为止,我已经足够正确地计算出一个数量,但我不知道如何显示所有结果。 我拍摄了以下问题的说明: http://imgur.com/s9JEbtu

  • 有没有办法知道Val的值在编译时或运行时是已知的?我是说我能在IDE或其他地方查一下吗?自从我用谷歌搜索之后,就再也没有关于它的文章了。他们只是指出哪些是在编译时已知的,哪些是在运行时已知的,但没有提到如何知道这一点。 据我所知,如果我将一个基元类型或字符串赋给Val,它的值在编译时就会被知道。相反,如果我指定了一个函数或对象(需要从另一个地方计算或引用该值),它的值在运行时是已知的。但是,有没有

  • 在这种情况下,编译器如何知道typename T将在其上定义一个方法?在Java中,我们可以指定泛型类扩展的接口,但C++显然没有相同的语法。那么,如果我们调用会发生什么呢?

  • 本文向大家介绍我们如何在Java中获取Enum常量的名称?,包括了我们如何在Java中获取Enum常量的名称?的使用技巧和注意事项,需要的朋友参考一下 一个枚举 是在添加了特殊的数据类型的Java 1.5版本,它可以用来定义一个集合 常量,当我们需要预定义的值列表并不代表某种数字或文本数据,我们可以使用一个枚举。枚举是常量,默认情况下,它们是静态的和最终的,因此枚举类型字段的名称以大写 字母表示。

  • 我试图了解更多关于异步/等待的信息,尤其是编译器如何知道在异步方法和等待时“暂停”,而不产生额外的线程。 例如,假设我有一个异步方法,如 我知道是我的方法被“挂起”并且调用它的线程返回线程池的地方,一旦跟踪连接打开的完成,然后找到一个可用的线程来运行。 这就是我困惑的地方。我查看了OpenAsync的源代码(https://referencesource.microsoft.com/#System