Architekturproblem

chickenwings

Erfahrenes Mitglied
Hallo,

ich versuche schon seit geraumer Zeit eine elgente Lösung für ein Architekturproblem zu finden, scheitere aber immer.
Vielleicht sieht einer eine Lösung und kann mir kurze Hilfestellung leisten.

Bei dem Problem geht es in erster Linie darum, "duplicate code" zu vermeiden.

ich habe eine Methode, die ich ständig sechs mal kopiert habe. Jede Methode unterscheidet sich in nur zwei Zeilen. Das roblem sind, denke ich die Generics:

Meine sechs Methoden, sind dieser Art:
Code:
private Result<KonkreteKlasseA> methode(KonkreteKlasseA a){
  Result<KonkreteKlasseA> result = new Result<KonkreteKlasseA>();
  ...
  mache irgendwas
  ...

  return result;
}


private Result<KonkreteKlasseB> methode(KonkreteKlasseB b){
  Result<KonkreteKlasseB> result = new Result<KonkreteKlasseB>();
  ...
  mache irgendwas
  ...

  return result;
}

u.s.w.

Result ist als Typisierte Klasse vom Typ <E extends AbstractClass> implementiert.
Meine Konkreten Klassen erweitern AbstractClass.

Nur, wie ist es möglich, nur eine Methode, nach dem obigen Muster zu haben?
Ich habe bereits versucht den Abstrakten Datentyp als Typiserungs Parameter in Result einzutragen, aber das wird nichts, ebenso wenig funktioniert der Konstrukt <? extends AbstractClass>

hat jemand einen Tipp?

Danke
chickenwings
 
Hallo,

das ist eher ein Design- als ein Architektur-Problem.

Suchst du sowas?
Java:
package de.tutorials.training;

public class GenericProcessorExample {
  public static void main(String[] args) {
    Processor processor = new Processor();
    Result<A> a = processor.process(new A());
    System.out.println(a);
    
    Result<B> b = processor.process(new B());
    System.out.println(b);
  }

  static class Processor {
    public <TResultValue extends Base> Result<TResultValue> process(TResultValue resultValue) {
      Result<TResultValue> result = new Result<TResultValue>();

      result.set(resultValue);
      // mache irgendwas

      return result;
    }
  }

  static class Result<TResultValue extends Base> {

    TResultValue value;


    public TResultValue get() {
      return value;
    }


    public void set(TResultValue value) {
      this.value = value;
    }


    @Override
    public String toString() {
      return super.toString() + ": " + this.value;
    }
  }

  static abstract class Base {

  }

  static class A extends Base {

  }

  static class B extends Base {
  }
}

Gruß Tom
 
Hallo,

vielen Dank, genau sowas habe ich gesucht.
Ich kenne den Konstrukt so gar nicht, sehe ich das erste Mal. Hat das eine bestimmte Bezeichnung?

Viele Grüsse,
chickenwings
 
Zurück