簡體   English   中英

Java中的反射(區分兩種類型)

[英]Reflection in Java (distinguishing two types)

在我的程序中,我將2個字符串傳遞給某種方法進行評估。 該方法必須獲取這些字符串的Class類(如果它是真實的類名!),並比較它們的共同點。 字符串有兩種輸入類型:

  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");
     }

JavaDoc for Class.forName()

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM