次のようなレコード(またはその他のレコード)があると仮定します。
record X(int i, int j) {
X(int i) {
this(i, 0);
}
X() {
this(0, 0);
}
X(String i, String j) {
this(Integer.parseInt(i), Integer.parseInt(j));
}
}
この記録を見つける方法はありますか?正規コンストラクタRecordHeader
リフレクション経由、つまり?で暗黙的に宣言されたもの。
ベストアンサー1
これを試して
static <T extends Record> Constructor<T> canonicalConstructorOfRecord(Class<T> recordClass)
throws NoSuchMethodException, SecurityException {
Class<?>[] componentTypes = Arrays.stream(recordClass.getRecordComponents())
.map(rc -> rc.getType())
.toArray(Class<?>[]::new);
return recordClass.getDeclaredConstructor(componentTypes);
}
そして
Constructor<X> c = canonicalConstructorOfRecord(X.class);
X x = c.newInstance(1, 2);
System.out.println(x);
出力
X[i=1, j=2]