Interface Generics, Interfaces und Listen - ich bin verwirrt.

Keyno

Mitglied
Hallo, ich habe dieses Interface:

Java:
public interface Game<M extends Move> {
    /**
     * Calculates and returns the list of possible moves
     * among which the active player can choose.
     * If the game is over (one player has won) or no move
     * is possible the list is empty.
     * @return the list of possible moves.
     */
    public List<M> getValidMoves();

[...]
}

Und das Interface Move:
Java:
public interface Move {
}

Meine ConnectFour (Vier Gewinnt) Klasse:
Java:
public class ConnectFour<M extends ConnectFourMove> implements Game<M> {

[...]
	@Override
	public List<M> getValidMoves() {
		ArrayList<M> list;
		int temp = -1;
		for (int i = 0; i < map.length; i++) {
			if (map[i][0] == 0) {
				Move move = new ConnectFourMove(i);	
				list.add(move);
			}
		}
		return list;
	}
[...]
}

Klasse ConnectFourMove:
Java:
public class ConnectFourMove implements Move {
	private static Player player;
	private int column;
	ConnectFourMove(int column) {
		this.setColumn(column);
	}
[...]
}


Meine getValidMoves() soll dabei in einem Vier Gewinnt berechnen, ob die erste Zeile gefüllt ist. Wenn sie nicht gefüllt ist, wird die Spaltennummer in die Liste übertragen. Ein Move ist ein Zug, den ein Spieler tätigt.
Ich habe nur das Problem, dass ich bei der Methode getValidMoves() den Move casten muss, damit ich ihn zur List<M> hinzufügen kann.

Wie kann ich das Casten umgehen?

Danke, Keyno
 

Barista

Top Contributor
Java:
public class ConnectFour<M extends ConnectFourMove> implements Game<M>

Warum definierst Du hier eine Type-Variable?
Du möchtest wahrscheinlich den Typ konkret binden:

Java:
public class ConnectFour implements Game<ConnectFourMove>
 
Zuletzt bearbeitet:

Keyno

Mitglied
Hi,

Danke für die Antwort.

Naja, weil ich ja irgendwie den Typ M einbinden muss. Ich muss mich ja ans Interface halten. D.h. es muss eine List<M> mit M geben.

Oder wie kann ich das anders einbinden?
Wenn ich die Klasse ConnectFour so definiere wie Du gerade meintest, erhalte ich von Eclipse den Error "M cannot be resolved to a type".
 

Barista

Top Contributor
Naja, weil ich ja irgendwie den Typ M einbinden muss. Ich muss mich ja ans Interface halten. D.h. es muss eine List<M> mit M geben.

M ist in diesem Fall kein Typ, sondern eine Typ-Variable (das Wort Type-Parameter war schon besetzt).

Also ein Platzhalter, der in einem weiteren Schritt konkret belegt wird.

Java:
@Override
    public List<ConnectFourMove> getValidMoves() {
        ArrayList<ConnectFourMove> list;
        int temp = -1;
        for (int i = 0; i < map.length; i++) {
            if (map[i][0] == 0) {
                ConnectFourMove move = new ConnectFourMove(i); 
                list.add(move);
            }
        }
        return list;
    }
 

Keyno

Mitglied
Achsoooo, ich darf den Type-Parameter selbst festlegen. :D

Aus welchem Grund auch immer dachte ich, dass ich M aus dem Interface übernehmen muss :O

Vielen Dank^^ Funktioniert auf diese Weise natürlich einwandfrei :)
 

KSG9|sebastian

Top Contributor
Hallo, ich habe dieses Interface:

Java:
public interface Game<M extends Move> {
    /**
     * Calculates and returns the list of possible moves
     * among which the active player can choose.
     * If the game is over (one player has won) or no move
     * is possible the list is empty.
     * @return the list of possible moves.
     */
    public List<M> getValidMoves();

[...]
}

IMHO ist diese Definition schon falsch. Die Art der gültigen Moves hängt doch nicht vom Spiel ab, oder? Und getValidMoves() liefert auch nicht immer extakt dieselben Typen von Moves zurück?

Warum glaubst du benötigst du den Generic in der Klassendeklaration?

Wäre nicht folgendes besser geeignet?
Java:
class Game{
    public List<? extends Move> getMoves();
}

Die gültigen Moves hängen ja von der Situation und nicht vom Spiel ab.
 

Keyno

Mitglied
Hi Sebastian,


Wir haben ein Interface vorgelegt bekommen, das wir nicht verändern dürfen.
Anhand dieses Interfaces müssen wir Vier Gewinnt programmieren.

Daher das Generic Interface.
Sehr nervig, wenn man nicht seine eigenen Methoden definieren darf :/
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
N Generics und Interfaces Java Basics - Anfänger-Themen 5
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
MarvinsDepression Datentypen Generics: Erste Berührungen Java Basics - Anfänger-Themen 6
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
districon Generics implementieren Java Basics - Anfänger-Themen 2
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Hilfe bei Generics Java Basics - Anfänger-Themen 11
G Generics Compilerfehler Java Basics - Anfänger-Themen 6
G Generics Methoden Java Basics - Anfänger-Themen 7
G Generics Java Basics - Anfänger-Themen 3
L Generics Tripel Java Basics - Anfänger-Themen 26
W Fragen zu Generics Java Basics - Anfänger-Themen 14
S Hilfe. Generics und BiFunctions Java Basics - Anfänger-Themen 10
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Java Generics factory method Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
I Generics und Comparable Java Basics - Anfänger-Themen 14
G Generics mit ? und Diamantoperator Java Basics - Anfänger-Themen 4
G Generics: Wildcard ? Java Basics - Anfänger-Themen 12
D Generics methode Java Basics - Anfänger-Themen 2
I Frage zu Generics und Wildcards Java Basics - Anfänger-Themen 2
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
A Generics Java Basics - Anfänger-Themen 6
W Generics - Typ zurückbekommen Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Generics von Profis leicht erklärt Java Basics - Anfänger-Themen 7
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
J Collections Generics: Typ wird nicht erkannt Java Basics - Anfänger-Themen 7
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
C Generics Java Basics - Anfänger-Themen 8
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
T Generics in Java... Java Basics - Anfänger-Themen 9
J Generics Java Basics - Anfänger-Themen 3
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
O Generics - Implementierung Java Basics - Anfänger-Themen 7
Shizmo Frage zu Generics Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
H Typsicherheit/Generics Java Basics - Anfänger-Themen 1
U Java generics funktioniert nicht Java Basics - Anfänger-Themen 0
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Generics Java Basics - Anfänger-Themen 4
R Compiler-Fehler Generics Problem Java Basics - Anfänger-Themen 2
K Generics bei Klassen- und Interfacedeklarationen Java Basics - Anfänger-Themen 3
D toArray und Generics Java Basics - Anfänger-Themen 2
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
C Erste Schritte Filter für Generics oder ähnliches Java Basics - Anfänger-Themen 2
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
M <T> Generics Java Basics - Anfänger-Themen 7
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
T Polymorphie Generics-Problem Java Basics - Anfänger-Themen 2
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Array Generics Java Basics - Anfänger-Themen 3
J Generics casten Java Basics - Anfänger-Themen 14
J Generics wildcard Java Basics - Anfänger-Themen 6
E Listen und Generics Java Basics - Anfänger-Themen 9
X Generics Java Basics - Anfänger-Themen 6
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
M OOP Mit Generics auf Methoden zugreifen? Java Basics - Anfänger-Themen 10
S Generics Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
L Datentypen Problem mit Generics und null Java Basics - Anfänger-Themen 6
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
W Interface Problem mit Generics Java Basics - Anfänger-Themen 2
M OOP Generics und Wildcards Java Basics - Anfänger-Themen 3
D Generics - Warnmeldungen Java Basics - Anfänger-Themen 2
M Polymorphie generics einsteigerprobleme Java Basics - Anfänger-Themen 3
D Vererbung Generics und Vererbung Java Basics - Anfänger-Themen 8
C Generics Array Java Basics - Anfänger-Themen 43
D Fehler mit generics Java Basics - Anfänger-Themen 10
S Generics - CaseInsensitiveMap selber schreiben? Java Basics - Anfänger-Themen 5
K Datentypen Generics Java Basics - Anfänger-Themen 3
P Comparable und Generics Java Basics - Anfänger-Themen 6
I Generics (Subtypen) Java Basics - Anfänger-Themen 17
N Typeinschränkung bei Generics Java Basics - Anfänger-Themen 13
C Generics und Cast Java Basics - Anfänger-Themen 5
H Generics werden in -source 1.2 nicht unterstützt Java Basics - Anfänger-Themen 16
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
lumo Java Generics Java Basics - Anfänger-Themen 19
M verlinkte Liste mit generics Java Basics - Anfänger-Themen 7
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
S Generics und Typerkennung Java Basics - Anfänger-Themen 7
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
B Java Listen und Generics Java Basics - Anfänger-Themen 35
O Abstract Method & Generics Java Basics - Anfänger-Themen 10
K Aufgabe Generics Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben