【问题标题】:Determining Fully Qualified Class Name from Java.lang.String从 Java.lang.String 确定完全限定的类名
【发布时间】:2015-08-03 18:37:21
【问题描述】:

我已经考虑过如何获取表示类名的 java.lang.String 并确定完全限定名,然后使用 Java.lang.Class.forName(FullyQualifiedName) 将字符串转换为类。

这让我感到困惑,因为我不能将 Java.lang.Class.forName() 与表示类名(例如“Address”)的 Java.lang.String 一起使用,因为我需要完全限定的名称,否则会出现异常.ClassNotFoundException 让我回到需要知道完全限定的名称,但是当我不能使用 Java.lang.Class.forName() 时如何。

我只是坚持我目前的知识。我已经使用 Google 进行了搜索,甚至创建了这个问题,但我敢打赌这已经被问到了。有人请指点我正确的方向吗?

注意:这个问题应该被删除,因为它似乎不可能在 Java 中执行 OP 请求的操作。

【问题讨论】:

  • 你不能。简单的名称不是唯一的。只需使用完全限定名称而不是简单名称。
  • 但我需要从表示为 Java.lang.String 的简单 Java.lang.Class 名称中动态确定完全限定名称
  • 类加载器中的两个类同名但包不同的情况下怎么办?
  • 我的意思是,你将如何决定哪个是正确的传递给 Class.forName()?它们都是类,并且都具有名称foo。你想要的是com.poo.foo,还是org.poo.foo?没有程序可以为您回答这个问题;你是在让它猜测。
  • 不,Class.forName() 只接受完全限定的类名,因为这个问题。

标签: java fully-qualified-naming


【解决方案1】:

类的完全限定名是类名以包名为前缀。例如,如果类 Address 在包 com.mycompany.myproject 中,则类 Address 的完全限定名称是 com.mycompany.myproject.Address

Java 只能通过完全限定名查找类(除非该类在默认包中 - 但类的简单名称也是完全限定名)。

你需要知道你的类在哪个包中,否则无法用Class.forName(...)加载类。

【讨论】:

  • 我必须动态执行此操作,因此永远不会知道该类在哪个包中。
  • 我同意你在回答中写的,但这不是我的问题的答案,我使用 Java.lang.String 形式的简单类名并想发现类的全限定名并通过Java.lang.Class.forName(...)获取一个类对象
  • @Mushy 然后,您将不得不编写代码来搜索类路径上的所有包,以找到具有您要查找的简单名称的类。这可能并不容易,如果在不同的包中有多个具有相同简单名称的类,您必须决定应该发生什么。
  • 不同包中不会有多个同名的类。我有幸在一个名称空间中工作,这个名称空间在类名上是独一无二的,但在字段名上却不是这样。我唯一的搜索问题是响应时间,但我会这样做。这个答案更符合我的要求,如果没有其他解决方案,将被接受。
猜你喜欢
  • 2017-03-17
  • 2021-03-25
  • 2020-11-12
  • 2014-06-04
  • 2011-11-08
  • 1970-01-01
  • 2021-11-30
  • 2020-07-14
  • 2019-12-14
相关资源
最近更新 更多