0

以下に記述されたコードを実行しようとしていますが、コードは例外をスローする必要がありますが、それは実行されません

try {
    Field.class.getMethod("getInt", Object.class).setAccessible(false);
    StringSearch.class.getMethod("searchChars",cc.getClass(),pattern3.getClass()).setAccessible(false);
    ss4.getClass().getMethod("searchChars",cc.getClass(),pattern3.getClass()).setAccessible(false);
    ss4.searchChars(cc,pattern3);
    ss4.searchString(str,pattern);
}
catch(NoSuchMethodException ex){
    ex.printStackTrace();
}

実際には IllegalAccessException をスローする必要があります。

ss4 はクラス BNDMWildcardsCI (文字列検索のアルゴリズムの 1 つ) のオブジェクトです cc、pattern3 は文字配列です str、pattern は文字列です

なぜ例外がスローされないのか、NoSuchMethodFound 例外がスローされないということは、メソッドを見つけることができることを意味します。

4

2 に答える 2

2

私の知る限りでは、メソッドがパブリック (またはアクセス可能) と宣言されている場合、setAccessible(false)それをプライベートにすることはできません。プライベート メソッドがあり、以前に を呼び出した場合にのみ役立ちますsetAccessible(true)

于 2012-12-11T00:06:04.170 に答える
0

このメソッドsetAccessible(boolean)は、通常のオブジェクトではなくオブジェクトに反映されます。コードでは、オブジェクトではなくメソッド オブジェクトに設定しss4ます。

私のポイントを示すには:

Class<?> clazz = ss4.getClass();
Method searchCharsMethod = clazz.getMethod("searchChars",cc.getClass(),pattern3.getClass());
       searchCharsMethod.setAccessible(true);

searchCharsMethodnotに割り当てられたオブジェクトで、accessible フラグを false に設定しましたss4

おまけとして、電話をかけたときに何が起こるかを確認してください

searchCharsMethod.invoke(ss4,cc,pattern3);

詳細については、ドキュメントをお読みください

于 2012-12-11T00:28:34.043 に答える