Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将类名解析为完全限定的?_Java_Classloader - Fatal编程技术网

如何在Java中将类名解析为完全限定的?

如何在Java中将类名解析为完全限定的?,java,classloader,Java,Classloader,在Java中,有没有办法将简单的类名(例如String)解析为完全限定的类名(例如Java.lang.String),或者更好的方法是直接将其解析为类?我想到的唯一方法是解析文件以进行导入,并从类路径JAR中找出答案。当然,一定有更好的方法。一般来说,没有办法做到这一点,因为相同的类名可以在多个包中使用,例如“Date”可以是java.util.Date或java.sql.Date。除非你能限制搜索范围,否则这在理论上是不可能的 此外,您可能想知道什么样的用例会要求您从非限定类名获取类。Java

在Java中,有没有办法将简单的类名(例如String)解析为完全限定的类名(例如Java.lang.String),或者更好的方法是直接将其解析为类?我想到的唯一方法是解析文件以进行导入,并从类路径JAR中找出答案。当然,一定有更好的方法。

一般来说,没有办法做到这一点,因为相同的类名可以在多个包中使用,例如“Date”可以是java.util.Date或java.sql.Date。除非你能限制搜索范围,否则这在理论上是不可能的


此外,您可能想知道什么样的用例会要求您从非限定类名获取类。

Java编译器通过尝试在类路径上查找具有源文件中的简单类名和导入语句中的包名的不同组合的类来确定完全限定名类名。编译类(.class)始终获得完全限定名

import java.util.Date;

public class Test {
    String str;
    Date date;
...
编译为Test.class

public class Test {
  Ljava/lang/String; str
  Ljava/util/Date; date
  ...

这应该是一个评论,而不是一个答案。@Juvanis好吧,也许我应该把它表述为一个答案。“因为逻辑不可能。”(OT)杜德这些年你都去哪里了??还记得我吗?(杰萨洛宁)@Joni你好!我终于从太阳城搬到了这里……呃……甲骨文论坛(它们变得完全不可用了)。我在这里见过很多熟悉的名字。太遗憾了,我不能恢复我的名誉;)这在一般情况下是无法做到的(例如,列表或日期)。是否存在某种限制包搜索的上下文?没错,它依赖于上下文,在运行时也可能不可能。我正在编译,所以我有一个上下文。我使用JavaX.TooS.JavaCoMPELER编译文件,但仍然不确定这有什么帮助。如果你可以在源代码中列出导入,你可以尝试从每个包中加载类,但是因为你在编译过程的中间,可能是因为它还没有被编译,所以无法找到类。