2017-12-13 1 views
-3

Ich bin in dieser Frage fest:Kann eine Schnittstelle in Java Variablen/generische Typen als Eingabe verwenden?

Der abstrakte Datentyp „myADT“ empfängt als Eingabe die generischen Typen T1 und T2.

Es hat ein Attribut "x" vom Typ T1 und ein Attribut "y" vom Typ T2, wie sowie "get" und "set" -Methoden für den Zugriff/die Änderung seiner Attribute. Programmieren Sie eine Java-Schnittstelle und ihre zugehörige Implementierungsklasse für den abstrakten Datentyp "myADT" für .

Wo ich verwirrt bin, ist der Eingang T1 und T2. Ich dachte, Schnittstellen könnten keine Eingaben wie eine Klasse machen? Wie würde ich das beantworten? Hier ist, was ich mit so weit kam:

public interface myADT{ 

    T1 X; 
    T2 Y; 

    public void setX(T1 X){ 
     X=X; 
    } 

    public void setY(T2 Y){ 
     Y=Y; 
    } 

    public void getX(){ 
     return x; 
    } 

    public void getY(){ 
     return Y; 
    } 

Ich bin nicht sicher, ob das auch ein wenig nach rechts oder, wenn seine völlig falsch. Wenn jemand helfen kann, werde ich für immer dankbar sein. Vielen Dank im Voraus!

+2

Wenn es eine Schnittstelle ist, kann es keine "Attribute" haben. –

+0

Sie können beliebig viele Typparameter akzeptieren, genau wie eine Klasse. Versuchen Sie, 'T1' und' T2' als Typparameter zu definieren, genau wie Sie es in einer Klasse tun könnten. Du wirst sehen, dass es funktioniert. Vielleicht möchten Sie jedoch [das Kapitel Interfaces aus den Java-Lektionen] (https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html) lesen. –

+1

Kein Instanzenstatus. Sie können statische Variablen haben, die für alle Instanzen gelten. Wenn Sie einen Status pro Instanz wünschen, benötigen Sie eine abstrakte Klasse. – duffymo

Antwort

0

Die Frage ist sicherlich unklar, aber das könnte etwas wie was sie verlangen.

public interface IADT<T1,T2>{ 
    public void setX(T1 x); 

    public void setY(T2 y); 

    public T1 getX(); 

    public T2 getY(); 
} 

public class ADT implements IADT<String,String> { 
    String x; 
    String y; 

    @Override 
    public void setX(String x) { 
     this.x = x; 
    } 

    @Override 
    public void setY(String y) { 
     this.y = y; 
    } 

    @Override 
    public String getX() { 
     return x; 
    } 

    @Override 
    public String getY() { 
     return y; 
    } 
} 
+0

Vielen Dank für Ihre Antwort, es macht die Dinge viel klarer, aber da die Frage besagt, dass T1 und T2 generische Typen sind, würden sie immer noch vom Typ String sein? – Paul

+0

@Paul - Sie sind generische Typen in der Schnittstelle, aber sie sind Strings in der Implementierung. – OldCurmudgeon

Verwandte Themen