2014-02-04 3 views
-1

Я хотел бы написать общий код для итерации, как показано ниже:Java, общий метод итерации, не связанных объектов

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 не realated друг к другу. Мне интересно, возможно ли и существует ли простое решение?

+0

Что этот код должен делать? –

+0

Почему вы добавляете 'ClassD' в' Set '? Есть ли у них отношения? –

+0

Код выглядит так, как будто он запустится, но это зависит от того, что такое подпись класса Class.add (?) '. –

ответ

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; 
     } 
    } 
} 
Смежные вопросы