Java:如何创建实现抽象接口的泛型类的实例?

时间:2017-11-03 05:21:47

标签: java generics interface instance

现在,我正在尝试创建一个通用类BTree<T>的实例,它实现了一个接口SSet<T>,后者又实现了Iterable<T> 我已经从BTree<T>类中删除了大部分代码,只留下了构造函数。但是,如果它是必不可少的,我可以添加整个代码,如果有人认为它是有用的。 BTree<T>类看起来像这样:

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);
    }

}

在我自己的班级中,我试图调用BTree<T>类并将Integer传递给泛型。在我的班上,我有:

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

以前在泛型类中工作过,但不是这个类。我想知道,我在传递参数对吗?或者在创建SSet<T>

的实例时,我是否需要以某种方式引用BTree<T>

2 个答案:

答案 0 :(得分:3)

您的构造函数签名为BTree(int, Class<T>)

所以看起来你需要做一些像

这样的事情
SSet<Integer> tree = new BTree<Integer>(2, Integer.class);

请注意,引用是SSet<>而不是BTree<> - 您可以在那里使用BTree<>引用,如果您愿意,但通常它优于{{3除非你有理由不这样做。

答案 1 :(得分:0)

您在上面提供的构造函数,接受两个值

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

但你只提供一个,

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

你有没有任何其他构造函数,如果没有,那么使用以下

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