Generische Interface - Problem

jCoder1984

Aktives Mitglied
Hallo

ich möchte für meine Object einen Service anbieten, um andere Objecte hinzuzufügen. Beispiel : Ein Team Object soll Member Objecte löschen und hinzufügen können. Genauso gibt es Vereine, die Team Objecte löschen und hinzufügen können sollen.

Nun gibt es ein Problem : ein Teil der Daten soll aus einer externen Datenquelle gelsen werden. Ein anderer Teil wird vom User eingegeben. Warum dies ist ist nicht wichtig. Wichtig ist allerdings, dass importierte Objekte nicht vom User manipuliert werden dürfen.

Aus diesem Grund soll ein importierter Club nur importierte Mannschaften hinzufügen dürfen.

das ganze sieht dann in etwa so aus :
Java:
public interface Service<T> {

    /**
     * @return a list with all elements <br>
     */
    public List<T> getElementList();

    /**
     * try to add a new elment to the list <br>
     * if the element exists already in the list return it <br>
     * otherwise return the new element <br>
     *
     * @return the existsing or the new created element <br>
     */
    public T addElement(T element);

    /**
     * remove an element of the list <br>
     */
    public void removeElement(T element);

}

Java:
public interface Club {

    /**
     * @return the name <br>
     */
    public String getName();

    /**
     * @return the member service <br>
     */
    public Service<Member> getMemberService();

    /**
     * @return the team service <br>
     */
    public Service<Team> getTeamService();

}

Java:
public class UserService<T extends UserObject> implements Service<T> {

    @Override
    public List<T> getElementList() {
    // TODO Auto-generated method stub
    return null;
    }

    @Override
    public T addElement(T element) {
    // TODO Auto-generated method stub
    return null;
    }

    @Override
    public void removeElement(T element) {
    // TODO Auto-generated method stub

    }

}

Java:
@RequiredArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
public class UserClub implements Club {

    @NonNull
    private String name;
    private Service<Member> memberService = new UserService<Member>();
    private Service<Team> teamService = new UserService<UserTeam>();
}

nun beschwert sich java, :
Code:
Type mismatch: cannot convert from UserService<UserTeam> to Service<Team>

Hat jeamnd eine Idee
 

CSHW89

Bekanntes Mitglied
In Generics kann man keinem Subtypen dem Basistyp ohne Bounds (s.u.) zuweisen. Warum dies nicht geht, zeigt folgendes Beispiel:
Java:
Service<UserTeam> userTeamService = new Service<UserTeam>();
Service<Team> teamService = userTeamService;
teamService.addElement(new AnotherTeam());
UserTeam userTeam = userTeamService.getElementList().get(0);
// hier würde es zu einem Laufzeitfehler kommen, da in 'userTeamService' kein 'UserTeam' ist, sondern ein Objekt 'AnotherTeam'.

Lösung: benutze Bounds.
Java:
Service<? extends Team> teamService = new UserService<UserTeam>();
Allerdings kann man dann auf 'teamService' keine Methoden verwenden, die den Generic-Typ als Parameter besitzen. Die Methode 'getElementList' kann also verwendet werden, 'addElement' und "removeElement' nicht.

Grüße
Kevin
 

jCoder1984

Aktives Mitglied
Hallo vielen Dank für deine Antwort. Nun weiß ich zumindest in welche Richtung mein Problem geht - von Interface Bounds habe ich bisher noch nichts gehört.

Ich habe nun versucht das Problem so lösen :

Java:
public class TeamService<T extends UserObject & Team> implements Service<T> {

    @Override
    public T addElement(T element) {
    // TODO Auto-generated method stub
    return null;
    }

    @Override
    public void removeElement(T element) {
    // TODO Auto-generated method stub

    }

    @Override
    public List<T> getElementList() {
    // TODO Auto-generated method stub
    return null;
    }

}

Java:
public class UserClub implements Club {

    @NonNull
    private String name;
//    private Service<? extends Member> memberService = new UserService<DefaultMember>();
    private Service<? extends Team> teamService = new TeamService<UserTeam>();
   
   
    public void test() {
    UserTeam element = new UserTeam();
//    ImporterTeam element = new ImporterTeam("test");
   
   
    teamService.addElement(element);
    }

Leider bekomme ich jetzt den folgenden Fehler :
The method addElement(capture#1-of ? extends Team) in the type Service<capture#1-of ? extends Team> is not applicable for the arguments (UserTeam)

Ich bräucht also noch einmal Hilfe. Vielen Dank
 

jCoder1984

Aktives Mitglied
Ich habe doch eine Lösun gefunden :
Code:
public interface Club {

    /**
     * @return the name <br>
     */
    public String getName();

    /**
     * @return the member service <br>
     */
    public Service<? extends Member> getMemberService();

    /**
     * @return the team service <br>
     */
    public Service<? extends Team> getTeamService();

}

Code:
public class UserClub implements Club {

    @NonNull
    private String name;
//    private Service<? extends Member> memberService = new UserService<DefaultMember>();
    private Service<UserTeam> teamService = new TeamService();
   
   
    public void test() {
    UserTeam element = new UserTeam();
//    ImporterTeam element = new ImporterTeam("test");
   
   
    teamService.addElement(element);
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
T Interface mit generische Typen Allgemeine Java-Themen 5
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
F Verständnisprobleme Aufgabenstellung Aktionsobjekte und generische Listen Allgemeine Java-Themen 1
J Generische Interfaces mehrfach einbinden Allgemeine Java-Themen 11
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
H Interface Generische Schnittstelle (rekusiv) Allgemeine Java-Themen 2
C generische Authentifizierung Allgemeine Java-Themen 7
JCODA Generische Map Frage Allgemeine Java-Themen 10
H Generische Array Allgemeine Java-Themen 11
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
D Methode für generische enummap/enum Allgemeine Java-Themen 10
B Generische Datentypen MergeSort Allgemeine Java-Themen 5
M Generische Klassen Allgemeine Java-Themen 3
M generische Listener Allgemeine Java-Themen 2
S Generische Typen: Frage dazu Allgemeine Java-Themen 11
H generische Klasse Realtion Allgemeine Java-Themen 2
T Ideenfindung: Generische Transportklasse? Allgemeine Java-Themen 3
C Generische Methode (Schablone) Allgemeine Java-Themen 8
G generische Klasse als Parameter einer generischen Klasse Allgemeine Java-Themen 5
leifg Rechenoperationen auf generische Datentypen Allgemeine Java-Themen 10
B Generische Typen instanzieren Allgemeine Java-Themen 11
R Generische Listener und Sender Allgemeine Java-Themen 12
M Generische Datentypen Allgemeine Java-Themen 14
S Generische Liste Allgemeine Java-Themen 30
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
S Generische Methode Allgemeine Java-Themen 13
R Frage zu einfügen in generische lineare Liste Allgemeine Java-Themen 7
S Generische Methoden Allgemeine Java-Themen 7
D Statische, generische Methode will nicht. Allgemeine Java-Themen 2
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
OnDemand Interface imlementieren Allgemeine Java-Themen 4
Buroto Interface Allgemeine Java-Themen 2
T Komische Zeichen im Zusammenhang mit Serializable interface Allgemeine Java-Themen 13
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
B JaxB und @XmlIDREF mit Interface Allgemeine Java-Themen 1
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
Kirby.exe Autocloseable Interface Allgemeine Java-Themen 2
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
S Interface, generischer Datentyp, Exception? Allgemeine Java-Themen 3
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
mrBrown Namensfindung Fluent-Interface Allgemeine Java-Themen 0
J Logik in Interface Allgemeine Java-Themen 2
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
B eigenes Consumer Interface Allgemeine Java-Themen 0
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
N GUI Interface, swing Allgemeine Java-Themen 7
Thallius Konzeptproblem User-Interface Allgemeine Java-Themen 5
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
C Klassen Problem mit Funktion einer Generischen Klasse die ein Interface implementiert Allgemeine Java-Themen 0
N Problem mit Generics und Interface Allgemeine Java-Themen 4
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
M Interface einer Library implementieren Allgemeine Java-Themen 3
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
Bananabert Interface Custom 'Event' mit Interface Allgemeine Java-Themen 10
J Interface Serializable Methodensignatur Allgemeine Java-Themen 2
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
F Interface IInterface oder Interface? Allgemeine Java-Themen 3
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
T Interface Probleme Allgemeine Java-Themen 8
M Queues und Queue Interface Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
W Java Native Interface und "mp3player" Allgemeine Java-Themen 3
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
P Eclipse Java Native Interface-Problem Allgemeine Java-Themen 8
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5
pg1337 Interface-Frage Allgemeine Java-Themen 24
S Interface Welchen Interface Stil favorisiert ihr? (usability) Allgemeine Java-Themen 17
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
T OpenOffice Interface Elemente Ein/Ausblenden Allgemeine Java-Themen 5
K Interface Interface comparable machen Allgemeine Java-Themen 9
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Trick für Compilerfehler bei fehlendem Interface Allgemeine Java-Themen 12
X Interface - Klasse einladen Allgemeine Java-Themen 6
G Interface -> InterfaceImplementierung Allgemeine Java-Themen 3
Ark Array durch Interface ersetzen Allgemeine Java-Themen 7
R Interface instanzieren Allgemeine Java-Themen 8
B Frage zu Interface und List Allgemeine Java-Themen 4
KrokoDiehl JNI: native im Interface Allgemeine Java-Themen 4
S normale vererbung als interface Allgemeine Java-Themen 2
E Beispiel für ein möglichst einfaches Interface Allgemeine Java-Themen 22
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
S interface verbung problem Allgemeine Java-Themen 9
S problem programm mit interface: Allgemeine Java-Themen 3
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben