クラス内で定義されているBuilderクラスを取得するために使用できるGenericBuilderを作成したかったのです。次のインターフェイスとクラスを作成しました
public interface BuilderType<T> {
}
public class MyObject implements BuilderType<MyObject.MyObjectBuilder> {
private int i;
private MyObject() {}
public int getI() {
return i;
}
public static MyObjectBuilder buildMyObject() {
MyObjectBuilder builder = new MyObjectBuilder();
return builder;
}
public static class MyObjectBuilder {
private final MyObject obj;
MyObjectBuilder() {
obj = new MyObject();
}
public MyObjectBuilder withI(int i) {
obj.i = i;
return this;
}
public MyObject build() {
return obj;
}
}
public class GenericBuilder {
public static <T extends BuilderType<S>, S> S getBuilder(Class<T> t) {
S s = null;
try {
s = (S) t.getDeclaredMethod("build" + t.getSimpleName(), null)
.invoke(null, null);
} catch (Exception e) {
e.printStackTrace();
}
return s;
}
}
GenericBuilderのステートメントs=(S)t.get ...はキャスト警告を出します:オブジェクトからSへのチェックされていないキャスト、それを排除する方法はありますか?