クラスオブジェクトをタイプリテラルとしてではなく、オブジェクトのみをパラメータとして受け入れるようにメソッドを制限するにはどうすればよいですか?

マイケル・ピーターソン

クラスオブジェクトを型リテラルとしてではなく、オブジェクトをパラメータとして渡したいと思いました。多くの方法を試しましたが、出力が得られませんでした。

public <T> List<Map<String,Object>> getUIElementsList(Class<T> requiredType) {
       doSomeThing();
       return this.fieldList;
}

上記のコードを実行している場合、パラメーターの受け渡しとして次の値を受け入れます。FormBeanクラスがある場合は

FormBean formBean = new FormBean();  
formBean.setUserId(252528); 
getUIElementsList(FormBean.class); //restrict this case
getUIElementsList(formBean); 

そのメソッドがすでに作成されたインスタンスオブジェクトのみを受け入れることができるようにしたい。古いオブジェクトインスタンス値も必要だったため、newInstance()メソッドを使用して別のオブジェクトを作成することもできません。

助言がありますか?

コンスタンチン・ヨフコフ

Class<T>それ自体は、いくつかの表すインスタンスは、このタイプのインスタンスである- 、余りにClassタイプによってパラメータ、T

提供された型がのインスタンスであるかどうかのチェックを追加し、Classそうである場合はIllegalArgumentException:をスローするのが最善の方法だと思います

public <T> List<Map<String,Object>> getUIElementsList(T value) {
    if (value instanceof Class) { 
        throw new IllegalArgumentException("Class instances are not supported");
    }
    ..
}

タイプパラメータを定義するときは、既存の(ファミリの)タイプの共通部分によってのみそれらをバインドできますが、「1つを除くすべてのタイプ」のような目的のタイプのように、特定のタイプに否定を適用することはできません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ