generic interface problem

Status
Nicht offen für weitere Antworten.
ich habe folgende dinge:

Code:
public interface Nodeable<N> extends Comparable<N>

public class Node implements Nodeable<Node>

public class AVLTree<N extends Nodeable<N>>

da in der klasse Node universal bleiben soll, ist der constructor protected
und der benutzer des packages soll eine klasse, die von Node erbt, schreiben

Code:
class myNode extends Node

um nun die klasse AVLTree zu benutzen, müsste das ganze ungefähr so aussehen

Code:
AVLTree<MapNode> myTree = new AVLTree<MapNode>();

leider gehts wohl so einfach nicht ... ich bekomme folgende fehlermeldung:

Bound mismatch: The type myNode is not a valid substitute for the
bounded parameter <N extends Nodeable<N>> of the type AVLTree<N>

ich will sicherstellen, dass in der AVLTree klasse nur abkömmlinge von Node
benutzt werden, die noch bspw noch Comparable sind, also einige andere Dinge erfüllen.

allerdings ist es sinnlos die Node klasse zu benutzen, da diese nicht
variabel auf die bedürfnisse für den jeweilgen benutzer änderbar ist.

nebenproblem:
außerdem soll der user methoden wie compareTo vom interface Comparable selbst definieren.
leider weiß ich nicht genau, wie ich dieses problem so löse, also habe ich erstmal der Node klasse
das interface aufgezwungen, auch wenn es dort von der Logik her sinnlos ist.

mfg

ghost_assassin31969
 

Marco13

Top Contributor
Hm. Ein kleines, compilierbares Codeschnipselchen, mit einem Beispiel, wie du es gerne verwenden würdest, wäre da vmtl. hilfreich (muss keine echte Implementierung sein, sondern nur etwas, wo die genannte fehlermeldung auftritt)

Ansonsten such mal nach Stichworten wie
"java generics tutorial" und dort nach "fun with wildcards"
und
"bounded wildcards"
Irgendwie "fühlt sich das gerade so an", als ob das hilfreich sein könnte....
 
M

maki

Gast
nebenproblem:
außerdem soll der user methoden wie compareTo vom interface Comparable selbst definieren.
leider weiß ich nicht genau, wie ich dieses problem so löse, also habe ich erstmal der Node klasse
das interface aufgezwungen, auch wenn es dort von der Logik her sinnlos ist.
Wenn deine Node Klasse nie instantiiert werden soll sondern nur als Basis für eigene Unterklassen dient, mache sie abstrakt.

Wenn du eine Methode in der abstrakten Klasse als abstract deklarierst, zwingst du die Benutzer deiner Klasse eigene Imlementierungen zu schreiben und dann brauchts du auch nicht sinnlose default Implementierungen bereitzustellen.
 

semi

Top Contributor
Code:
public interface Nodeable<N> extends Comparable<N>
{
   ...
}

public class Node<T> implements Nodeable<T>, Comparable<T>
{
   public int compareTo(T node)
   {
      ...
   }
}

class MapNode extends Node<MapNode>
{
   ...
}

public class AVLTree<N extends Nodeable<N>>
{
}

oder 

public abstract class Node<T> implements Nodeable<T>, Comparable<T>
{
   ...
}

class MapNode extends Node<MapNode>
{
   public int compareTo(MapNode node)
   {
      ...
   }
}
 
die klasse Node kann nicht abstract werden, da sie trotzdem
einige methoden und Objekte enthält, die für jede subclass gleich sein wird.

€: habe mal folgendes probiert

Code:
AVLTree<Node> myTree = new AVLTree<Node>();

problem ist nun, dass er die compareTo methode von Node benutzt.
die kann aber nicht wissen, wie vererbte klassen von Node verglichen werden müssen -.-

mfg

ghost_assassin31969
 

semi

Top Contributor
ghost_assassin31969 hat gesagt.:
die klasse Node kann nicht abstract werden, da sie trotzdem
einige methoden und Objekte enthält, die für jede subclass gleich sein wird.
Das macht sie erst recht zum Kandidaten für eine abstrakte Klasse.
 
hab mir mein problem nochmal durch den kopf gehen lassen und
versuche es noch einmal ein wenig besser zu beschreiben:

ich habe eine klasse AVLTree, die ein generic N braucht.
dieser generic N soll
a) ein abkömmling von der abstrakten klasse Node<N> sein
b) das interface Comparable<N> umsetzen (methode compareTo)

Node kann/darf nicht das interface implementieren, da Node
von der Logik her nicht vergleichbar ist.

Code:
public class AVLTree<N extends Node<N>,  Comparable<N>>

public abstract class Node<N>

public class MapNode extends Node<MapNode> implements Comparable<MapNode>

nun weiß ich aber nicht, wie ich die erste zeile formulieren soll.
mit komma aufzählen geht nicht, es müssen dort aber Node<N>
und Comparable<N> stehen/realisiert werden.

ich hoffe, so ist mein problem mehr verständlich

mfg

ghost_assassin31969
 
ghost_assassin31969 hat gesagt.:
hab mir mein problem nochmal durch den kopf gehen lassen und
versuche es noch einmal ein wenig besser zu beschreiben:

ich habe eine klasse AVLTree, die ein generic N braucht.
dieser generic N soll
a) ein abkömmling von der abstrakten klasse Node<N> sein
b) das interface Comparable<N> umsetzen (methode compareTo)

Node kann/darf nicht das interface implementieren, da Node
von der Logik her nicht vergleichbar ist.

Code:
public class AVLTree<N extends Node<N>,  Comparable<N>>

public abstract class Node<N>

public class MapNode extends Node<MapNode> implements Comparable<MapNode>

nun weiß ich aber nicht, wie ich die erste zeile formulieren soll.
mit komma aufzählen geht nicht, es müssen dort aber Node<N>
und Comparable<N> stehen/realisiert werden.

ich hoffe, so ist mein problem mehr verständlich

€: problem vorerst gelöst:

Code:
public class AVLTree<N extends Node<N>>

public abstract class Node<N> implements Comparable<N>

public class MapNode extends Node<MapNode> implements Comparable<MapNode>

da Node abstrakt ist, muss es ja garnicht die methode implementieren.

mfg

ghost_assassin31969
 

semi

Top Contributor
ghost_assassin31969 hat gesagt.:
ich habe eine klasse AVLTree, die ein generic N braucht.
dieser generic N soll
a) ein abkömmling von der abstrakten klasse Node<N> sein
b) das interface Comparable<N> umsetzen (methode compareTo)
Klingt für mich nach sowas
Code:
abstract class Node<N> implements Comparable<N>
{
   ...
}

class AVLTree<N extends Node<N>>
{
   ...
}

class MapNode extends Node<MapNode>
{
   public int compareTo(MapNode o)
   {
      ...
   }
}

bzw.

abstract class Node<N extends Comparable<N>>
{
   ...
}

class AVLTree<N extends Node<N> & Comparable<N>>
{
   ...
}

class MapNode extends Node<MapNode> implements Comparable<MapNode>
{ 
   public int compareTo(MapNode o) 
   { 
      ... 
   } 
}
Verrene dich aber nicht mit den Generics. Man kann damit ziemlich "steife" Vererbungshierarchien produzieren. ;)

Edit: Kleine Korrektur.
 
vielen dank semi!

die entscheidende antwort für mich war das &
in folgender zeile:

Code:
class AVLTree<N extends Node<N> & Comparable<N>>

ich hatte es schon mit and probiert, aber keine chance :roll:

also problem gelöst, vielen dank an alle, die mit geholfen haben!!

mfg

ghost_assassin31969
 

Marco13

Top Contributor
Marco13 hat gesagt.:
Ansonsten such mal nach Stichworten wie
"java generics tutorial" und dort nach "fun with wildcards"
...
Irgendwie "fühlt sich das gerade so an", als ob das hilfreich sein könnte....

... unter anderem, weil genau DORT steht, wie man mehrere Typanforderungen in Generics mit "&" verknüpfen kann - aber warum selbst lesen .... :roll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
L Datentypen Deklarierte Felder einer Generic Klasse bestimmen Java Basics - Anfänger-Themen 7
O Comparable Generic Java Basics - Anfänger-Themen 24
F Type safety: A generic array of.. Fehler Java Basics - Anfänger-Themen 3
Yjuq Generic Methode - Wie muss die List Definition aussehen? Java Basics - Anfänger-Themen 3
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
O Generic - Verstädnisproblem Java Basics - Anfänger-Themen 5
G instanceof in Generic Java Basics - Anfänger-Themen 7
N Datentypen LocalDate Generic Comparable Java Basics - Anfänger-Themen 2
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
M Generic Prüfungsvorbereitung Java Basics - Anfänger-Themen 4
G Generic und Listen Java Basics - Anfänger-Themen 8
J Generic - Autoboxing Java Basics - Anfänger-Themen 18
N Generic clonen => eclipse empfiehlt @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 2
S Generic Java Basics - Anfänger-Themen 9
P Java Generic Wildcard Java Basics - Anfänger-Themen 2
G Namen der Generic Klasse Java Basics - Anfänger-Themen 3
D generic extendet class Java Basics - Anfänger-Themen 10
M Generic's und Vererbung Java Basics - Anfänger-Themen 6
B Generic? Enum - So lösbar? Java Basics - Anfänger-Themen 8
capgeti Datentypen Static generic return value von Subclass? Java Basics - Anfänger-Themen 9
C Generic Tutorial Java Basics - Anfänger-Themen 12
T Generic vom Generic: Zu sehr verschachtelt? Java Basics - Anfänger-Themen 6
V libssrckdtree-j Generic k-d tree Java library - weiss nicht wo des hin soll Java Basics - Anfänger-Themen 2
L Sinn hinter Generic? Java Basics - Anfänger-Themen 5
0 Was bedeutet dieser Generic-code? Java Basics - Anfänger-Themen 3
A Generic Problem Java Basics - Anfänger-Themen 16
S Generic Methode: syntax klemmt Java Basics - Anfänger-Themen 10
S Generic: Verständnisfrage Java Basics - Anfänger-Themen 2
S generic programmierung "ne:w T[X]" Java Basics - Anfänger-Themen 2
Safado generic array creation Java Basics - Anfänger-Themen 2
G Frage zur Generic java ? Java Basics - Anfänger-Themen 9
G eine Frage zur Generic Java ? Java Basics - Anfänger-Themen 8
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
Say Abstrakt oder Interface Java Basics - Anfänger-Themen 3
Say public/default Interface Java Basics - Anfänger-Themen 9
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
I Browser integriert in Desktop Applikation - Webcam interface not found Java Basics - Anfänger-Themen 26
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
U Interface | constructor injection Java Basics - Anfänger-Themen 5
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
I JSON und Interface Java Basics - Anfänger-Themen 3
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
L Interface & Comparable Java Basics - Anfänger-Themen 15
T Interface Java Basics - Anfänger-Themen 0
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
A Interface Kuddelmuddel Java Basics - Anfänger-Themen 4
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
H abstract und interface Java Basics - Anfänger-Themen 4
F Interface Casting Java Basics - Anfänger-Themen 13
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Interface Java Basics - Anfänger-Themen 2
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
B Interface vs Abstract Java Basics - Anfänger-Themen 2
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
J Vererbung Abstrake Klasse <-> Interface Java Basics - Anfänger-Themen 5
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
N Interface Interface Erstellung Java Basics - Anfänger-Themen 3
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33

Ähnliche Java Themen

Neue Themen


Oben