1 回答

TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊
您的init方法似乎需要一種方法來基于單個值創(chuàng)建給定類的實例。String
在這種情況下,您不需要反思。無需傳入Class實例化和初始化,您可以實現(xiàn)一種“策略模式”形式,其中策略是可變的并且僅定義如何創(chuàng)建新的、ID 初始化的對象。
在 Java 8 及更高版本中,您可以為此使用函數(shù)式接口和 Lambdas:
private <T extends AbstractSuperClassA > T init(NamedNodeMap attributes, Function<String,T> creator) {
...
T newElement = creator.apply(identifier);
...
}
然后適當(dāng)?shù)厥褂盟?,例?/p>
B someB = init(attrs, B::new);
C someC = init(attrs, id -> {C c = new C(); c.setId(id); return c;});
...
然而,問題是您如何決定應(yīng)該實例化哪個具體類。在任何情況下,該邏輯都必須在某個地方進(jìn)行編碼,因此可能有更好的方法來連接邏輯以收集值和初始化新實例的邏輯。
是否要求實例id在構(gòu)造函數(shù)中接收?還是可以稍后設(shè)置?
添加回答
舉報