SR2:
私は再クラスのフィールド上のコンパレータを返すという機能を作成しようとしていますが、私はラインで、O2の値を取得しようとしていますエラーを取得していますComparable v2 = (Comparable) field.get(o2);
ラムダパラメータをに変換することができないと言って、オブジェクト。誰かの助けができますか?
public Comparator comp(String className, String fieldName) throws Exception {
Comparator comparator = Comparator.comparing((o1, o2) -> {
Class aClass = null;
try {
aClass = Class.forName(className);
Field field = aClass.getDeclaredField(fieldName);
field.setAccessible(true);
Comparable v1 = (Comparable) field.get(o1);
Comparable v2 = (Comparable) field.get(o2);
return v1.compareTo(v2);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
});
return comparator;
}
ジョニ:
あなたはComparator.comparingメソッドを使用しますが、何を渡しているのは、実際のコンパレータの実装ですしています。あなたはそのメソッドの呼び出しと使用を取り除くことができます:
Comparator comparator = (o1, o2) -> {
Class aClass = null;
try {
aClass = Class.forName(className);
Field field = aClass.getDeclaredField(fieldName);
field.setAccessible(true);
Comparable v1 = (Comparable) field.get(o1);
Comparable v2 = (Comparable) field.get(o2);
return v1.compareTo(v2);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
};
return comparator;
別の方法としては、Comparator.comparingメソッドを使用しておくが、あなたが渡すことになっていることを心に留めておくことができ、フィールドの抽出値という機能:
public Comparator comp(String className, String fieldName) throws Exception {
Class aClass = Class.forName(className);
Field field = aClass.getDeclaredField(fieldName);
field.setAccessible(true);
Comparator comparator = Comparator.comparing(o1 -> {
try {
Comparable v1 = (Comparable) field.get(o1);
return v1;
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
});
return comparator;
}