【问题标题】:Java to instantiate a class dynamically based on a string nameJava根据字符串名称动态实例化类
【发布时间】:2013-12-13 15:22:53
【问题描述】:

好的,所以这个问题已经被问过很多次了,我查看了各种答案,但仍然无法做到这一点。

问题: 我有一些 5 个片段(非 android 人员请假设类),我需要根据列表中单击的内容动态实例化它们。我在点击处理程序中得到了字符串。我方便地命名了我的片段。所以基本上我的一个片段被称为 SearchResults.java 并且相应的项目单击将返回“SearchResults”。所以我想做这样的事情:

public void onClick(View v) {
Class cls = Class.forname(clickedString)   //clickedString = "SearchResults"
//instantiate it as if it were equal to SearchResults sr = new SearchResults().
}

我只是想避免 if/else 或 switch case 并寻找更聪明的方法。我可能会遗漏一些非常基本的核心 Java 概念。请帮忙。

【问题讨论】:

标签: java android


【解决方案1】:

首先你需要完全限定的类名,即:your.full.class.path.SearchResults,然后假设一个无参数构造函数实例化变得相对容易:

Class<?> cls = Class.forname(clickedString);
SearchResults results = (SearchResults) cls.newInstance();

【讨论】:

  • 所以你的意思是 clickedString 必须是一个完全限定的类名?幸运的是,我的片段已经有了一个 newInstance 方法。更多的是工厂的东西。希望被调用而不是默认调用。
  • 我想这对我有用。除了我的片段已经有一个静态的“newInstance”方法。
  • 该方法调用的是forName而不是forname。
猜你喜欢
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 2014-11-15
  • 2021-04-18
相关资源
最近更新 更多