2017-11-03 2 views
0

Gerade jetzt, ich versuche, eine Instanz einer generischen Klasse BTree<T> zu schaffen, die SSet<T> eine Schnittstelle implementiert, die wiederum implementiert Iterable<T> ich den Großteil des Codes aus der nur BTree<T> Klasse und verließ den Konstruktor gelöscht habe. Wenn es jedoch wichtig ist, kann ich den gesamten Code hinzufügen, wenn jemand glaubt, dass es hilfreich ist. Die BTree<T> Klasse sieht ungefähr so ​​aus:Java: Wie erstelle ich eine Instanz einer generischen Klasse, die eine abstrakte Schnittstelle implementiert?

package assignment2_draft; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Comparator; 
import java.util.Iterator; 
import java.util.List; 
import java.util.SortedSet; 
import java.util.TreeSet; 

public class BTree<T> implements SSet<T> { 

    //Some methods 

    public BTree(int b, Class<T> clz) { 
    this(b, new DefaultComparator<T>(), clz); 
    } 

} 

In meiner eigenen Klasse, Ich versuche, die BTree<T> Klasse zu rufen und eine Integer in die generischen passieren. In meiner Klasse habe ich:

BTree<Integer> myTree=new BTree<Integer>(Integer.class); 

die in generischen Klassen vor, aber nicht diese Klasse gearbeitet hat. Ich frage mich, übertrage ich die Parameter richtig? Oder brauche ich irgendwie SSet<T> verweisen, wenn eine Instanz von BTree<T>

+0

Implementiert eine *** abstrakte *** Schnittstelle? Im Gegensatz zu welcher anderen Art von Schnittstelle? [JLS §9.1.1.1] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.1.1.1): *** Jede ** Schnittstelle ist implizit 'abstract'. * – Andreas

Antwort

3

Ihre Konstruktor Signaturerstellungs BTree(int, Class<T>)

So würde es scheinen Sie müssen etwas tun, wie

SSet<Integer> tree = new BTree<Integer>(2, Integer.class); 

Hinweis der Referenz ist ein SSet<> nicht ein BTree<> - Sie könnten eine BTree<> Referenz dort verwenden, wenn Sie wollten, aber im Allgemeinen ist es program to an interface vorzuziehen, es sei denn, Sie haben einen Grund nicht zu.

+0

Nun, ich denke du bist viel näher in der Syntax. Entfernte meine :) – nullpointer

0

Ihr Constructor, die Sie oben angegebenen, akzeptieren zwei Wert

public BTree(int b, Class<T> clz) { 
this(b, new DefaultComparator<T>(), clz); 
} 

, aber sie sind nur ein,

BTree<Integer> myTree=new BTree<Integer>(Integer.class); 

Bereitstellung macht Sie andere Konstruktor zu tun haben, wenn nicht dann folgende

verwenden
int a=5; 
SSet<Integer> myTree=new BTree<Integer>(a,Integer.class); 
Verwandte Themen