gpt4 book ai didi

java - Java中的反射(区分两种类型)

转载 作者:行者123 更新时间:2023-12-02 00:05:19 24 4
gpt4 key购买 nike

在我的程序中,我将2个字符串传递给某种方法进行评估。该方法必须获取这些字符串的 Class 类(如果它是真实的类名!)并比较它们的共性。字符串输入可以有 2 种类型:

  1. Java API 中的类名称,例如“java.lang.Byte”、“java.lang.Math”等
  2. 任何其他可能的字符串,例如“some string”、“hello”等。

在获取这两个字符串的方法中,我如何了解它是类型 1 还是类型 2,以免出现 Exception

最佳答案

我怀疑是否有一个完美的条件来检查这一点,因为“Hello”与 java.lang.Byte 一样是一个有效的类名。您可以做的是根据有效的 java 标识符验证字符串 http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.8

所以有两项检查:1. 检查有效的 java 类名。2. 尝试使用Class.forName()加载类。如果类路径中不存在该类,则会抛出 ClassNotFoundException。

使用了我在其他一些链接中找到的简单正则表达式来验证类名

String regexForBasicClassNameValidation = "([a-zA-Z_$][a-zA-Z\\d_$]*\\.)*[a-zA-Z_$][a-zA-Z\\d_$]*" ;
if(inputString.matches(regexForBasicClassNameValidation))
{
try {
Class.forName(inputString) ;
System.out.println("Valid class name");
} catch (ClassNotFoundException e) {
System.out.println("Invalid Class name or class not found in classpath ");

}
}
else
{
System.out.println("Not a class name");
}

关于java - Java中的反射(区分两种类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com