先日、クラスの各要素を手動で文字列に書き出すことで Java のクラスの toString() を書いていたところ、リフレクションを使用して、機能する汎用の toString() メソッドを作成できる可能性があることに気付きました。すべてのクラスで。つまり、フィールド名と値を把握し、それらを文字列に送信します。
フィールド名を取得するのはかなり簡単です。同僚が思いついたのは次のとおりです。
public static List initFieldArray(String className) throws ClassNotFoundException {
Class c = Class.forName(className);
Field field[] = c.getFields();
List<String> classFields = new ArrayList(field.length);
for (int i = 0; i < field.length; i++) {
String cf = field[i].toString();
classFields.add(cf.substring(cf.lastIndexOf(".") + 1));
}
return classFields;
}
ファクトリを使用すると、最初に toString() が呼び出されたときにフィールドを 1 回格納することで、パフォーマンスのオーバーヘッドを削減できます。ただし、値を見つけるには、はるかにコストがかかる可能性があります。
リフレクションのパフォーマンスが原因で、これは実際的というよりも仮説的なものになる可能性があります。しかし、リフレクションのアイデアと、それを使って日常のプログラミングを改善する方法に興味があります。