【问题标题】:Get Class Name for the given String获取给定字符串的类名
【发布时间】:2020-05-20 14:50:01
【问题描述】:

我有一个用例,我在 DB 中存储了 Java 数据类型列表,如字节、字符、整数、长整型、BigDecimal、BigInteger、布尔值。

所以我的用例就像如果我读取值 Long,我需要创建 Long.class,如果我读取 String,然后是 String.class。

Class cls = Class.forName("java.lang.Long);,那么我可以将 cls 用于我自己的目的。

我可以通过使用上述数据类型的 Enum 来实现这一点,只要我从 db 中读取值,我就会将值传递给 enum 以获取类类型。但我不知道它是否有效。 Java中是否存在任何方法,对于给定的字符串(没有完全限定的名称),它应该返回类类型。

【问题讨论】:

  • 你能分享一些代码吗?

标签: java class jvm


【解决方案1】:

存储对 Class 对象的引用是有效的,但使用 Class 对象进行反射可能会很昂贵。如果您只是将 Class 用作参考,那么您很好。

enum Decodable {
    BIG_INTEGER(BigInteger.class),
    INTEGER(Integer.class)
    // etc

    private final Class<?> decodableClass;

    private Decodable(Class<?> decodableClass) {
        this.decodableClass = decodableClass;
    }
}

您也可以只维护一组 Class 对象。

private static final Set<Class<?>> DECODABLE_CLASSES = ImmutableSet.of(Integer.class, BigInteger.class); //etc

【讨论】:

  • 是的,和我想的一样。拥有 Enum 看起来更好。我确实在 groovy 中看到很少有这样的实用程序,但这会返回 ClassNode,而不是类。 import org.codehaus.groovy.ast.ClassHelper;ClassNode classNode = ClassHelper.make("String")我以为java可能有这样的东西
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 2016-09-08
  • 2016-07-09
  • 1970-01-01
  • 2023-03-04
相关资源
最近更新 更多