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



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

  1. Java API中的类名,如" Java .lang. byte "," Java .lang. byte "。数学"等。
  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");
     }

JavaDoc for class . forname ()

Class clazz = null;
try 
{
    clazz = Class.forName(myString);    
} 
catch (ClassNotFoundException e) 
{
    System.out.println("This isn't a class");
}

相关内容

  • 没有找到相关文章

最新更新