0

私のプログラムでは、評価のためにいくつかのメソッドに2 つの文字列を渡しています。メソッドはClass、これらの文字列のクラスを取得し (実際のクラス名の場合)、それらの共通点を比較する必要があります。文字列には 2 種類の入力があります。

  1. 「java.lang.Byte」、「java.lang.Math」などの Java API のクラス名。
  2. 「some string」、「hello」などの他の文字列も可能です。

これらの2つの文字列を取得する私のメソッドでは、それがタイプ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に対して文字列を検証することです。

したがって、2つのチェック: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 に答える