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

时间:2012-12-22 18:37:31

标签: java reflection

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

  1. Java API中的类名称,如“java.lang.Byte”,“java.lang.Math”等。
  2. 任何其他字符串可能像“some string”,“hello”等
  3. 在我的方法中获取这两个字符串我怎么能理解它是1或2类型所以不能得到Exception

2 个答案:

答案 0 :(得分: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");
     }

答案 1 :(得分:1)

JavaDoc for Class.forName()

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