我想为迭代编写通用代码,如下所示:
public ClassA assemlbyClassA(ClassC c) {
Set<ClassB> classBElements = c.getClassBElements();
ClassA result = new ClassA();
if (classBElements != null && classBElements.size() > 0) {
for (ClassB classB : classBelements) {
ClassD classD = new ClassD();
classD.setMethod1(classB.callMethod1());
classD.setMethod2(classB.callMethod2());
result.add(classD);
}
}
return result;
}
A,B,C,D类彼此不相关。 我想知道是否可能以及简单的解决方案是否存在?
答案 0 :(得分:0)
有可能:有点儿! 'new GenericClass()'是不可能的,因此必须更换。
(或者,请参阅Create instance of generic type in Java?。)
“存在简单的解决方案”:嗯,这就是“简单”对你意味着什么。
这是一种方法,您可以将其复制并粘贴到一个部分中:
interface StackoverflowAnswer {
public interface ClassABase<ClassD> {
void add(ClassD value);
}
public interface ClassBBase<X1, X2> {
X1 callMethod1();
X2 callMethod2();
}
public interface ClassCBase<ClassB> {
Set<ClassB> getClassBElements();
}
public interface ClassDBase<X1, X2> {
void setMethod1(X1 value);
void setMethod2(X2 value);
}
public static abstract class Z<X1, X2,
ClassA extends ClassABase<ClassD>,
ClassB extends ClassBBase<X1, X2>,
ClassC extends ClassCBase<ClassB>,
ClassD extends ClassDBase<X1, X2>> {
protected abstract ClassA newClassA();
protected abstract ClassD newClassD();
public ClassA assemlbyClassA(ClassC c) {
Set<ClassB> classBElements = c.getClassBElements();
ClassA result = newClassA();
if (classBElements != null && classBElements.size() > 0) {
for (ClassB classB : classBElements) {
ClassD classD = newClassD();
classD.setMethod1(classB.callMethod1());
classD.setMethod2(classB.callMethod2());
result.add(classD);
}
}
return result;
}
}
}