0

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

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

在我获取这两个字符串的方法中,我怎么能理解它是 1 型还是 2 型,所以不能得到Exception

4

2 回答 2

2

我怀疑是否有一个完美的条件来检查它,因为“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");
     }
于 2012-12-22T19:10:22.103 回答
1

Class.forName() 的 JavaDoc

Class clazz = null;
try 
{
    clazz = Class.forName(myString);    
} 
catch (ClassNotFoundException e) 
{
    System.out.println("This isn't a class");
}
于 2012-12-22T18:44:13.840 回答