java - 反射,创建一个给定 int 的特定对象

标签 java reflection mapping

我有像 Dog.javaCat.javaBird.javaFish.java 这样的类,Not_Listed.java 等。我还有一个 ID.java ,它只保留一些最终的 int 映射:

public class ID{
  public static final int CAT = 1;
  public static final int DOG = 3;   // there maybe some integers skipped
  public static final int FISH = 4;   // but all integers are unique
  public static final int BIRD = 6;
  public static final int NOT_LISTED = -1;
}

上面列出的所有类都扩展了 Animal.java 类。 我需要的是给定“6”我需要创建一个Bird对象,给定“1”我需要创建Cat对象。给定“2”或“5”,我可以返回一个 Not_Listed 对象或简单地抛出一个错误(两者都有效)。我可以简单地使用 switch caseHashMap 来完成此操作,但我的列表有点长,而且我不想在列表增长时更新代码。所以我想到了反射(reflection),但我不知道该怎么做?

也欢迎任何其他有效的解决方案。抱歉,我对反射很菜鸟。提前致谢。

编辑:ID必须

最佳答案

您不需要对此进行反射(reflection)。

创建一个枚举而不是您的 id 类,并在枚举中包含一个类引用,即:

enum Animal {
     CAT(1, Cat.class),
     DOG(2, Dog.class),
     FISH(3, Fish.class);


     private final Class clazz;
     private final int id;

     Animal(int id, Class clazz) {
        this.id = id;
        this.clazz = clazz;
     }

     public Object generateInstance() {
         return clazz.generateInstance();
     }

     public class getGeneratedClass() {
         return clazz;
     }

     public int getId() {
         return id;
     }
}

这利用了 Java 的功能,允许枚举成为功能齐全的类,并记录要在枚举中的每个条目中使用的 Class。然后,只要该类具有 0 参数构造函数,您就可以使用该Class 按需生成新实例。

要使用它,只需执行以下操作:

Animal.DOG.generateInstance() // Returns a Dog object
Animal.CAT.generateInstance() // Returns a Cat object

如果您希望能够从 id 获取类型,您可以在枚举内构建一个 HashMap 来进行查找,或者只是循环 enum.values() 来查找匹配项。

关于java - 反射,创建一个给定 int 的特定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693711/

相关文章:

java - artifactory-maven-插件 : How to resolve dependencies from private Artifactory without settings. xml

c# - 在 C# 中按类名作为字符串获取类属性

c# - 获取类实现的泛型接口(interface)的类型参数

go - golang反射将结构的第一个值设置为其零值

java - java中的反向多重映射

java - 将 BufferedImage 转换为另一种类型

java - 扩展 Hibernate Validator 约束时出现问题

iphone - 在 iOS 中测量/计算距离

java - Spring 请求映射与正则表达式如 javax.ws.rs

java - 我是否总是需要在 hibernate 中为多对多关系创建单独的类