在我的程序中,我将2 个字符串传递给某种方法进行评估。该方法必须获取Class
这些字符串的类(如果它是真正的类名!)并比较它们的共性。字符串可以有 2 种类型的输入:
- Java API 中的类名,如“java.lang.Byte”、“java.lang.Math”等。
- 任何其他可能的字符串,例如“some string”、“hello”等。
在我获取这两个字符串的方法中,我怎么能理解它是 1 型还是 2 型,所以不能得到Exception
?
在我的程序中,我将2 个字符串传递给某种方法进行评估。该方法必须获取Class
这些字符串的类(如果它是真正的类名!)并比较它们的共性。字符串可以有 2 种类型的输入:
在我获取这两个字符串的方法中,我怎么能理解它是 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");
}
Class clazz = null;
try
{
clazz = Class.forName(myString);
}
catch (ClassNotFoundException e)
{
System.out.println("This isn't a class");
}