如何创建一个将接口传递给构造函数的抽象类实例?

时间:2017-11-02 17:11:50

标签: java generics instance abstract

现在,我有一个泛型类USetSet<T>,它扩展了我想要调用的AbstractSet<T>。值得注意的是,USetSet<T>的构造函数接受了USet<T>接口。课程USetSet<T>如下:

package bag_assignment1;

import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class USetSet<T> extends AbstractSet<T> {
    USet<T> s;

    public USetSet(USet<T> s) {
        this.s = s;
    }

    @SuppressWarnings("unchecked")
    public boolean contains(Object x) {
        return s.find((T)x) != null;
    }

    public boolean add(T x) {
        return s.add(x);
    }

    @SuppressWarnings("unchecked")
    public boolean remove(Object x) {
        return s.remove((T)x) != null;
    }

    public Iterator<T> iterator() {
        return s.iterator();
    }

    public int size() {
        return s.size();
    }

    public void clear() {
        s.clear();
    }
}

供参考,USet<T>界面为:

package bag_assignment1;

public interface USet<T> extends Iterable<T> {
    public int size();
    public boolean add(T x);
    public T remove(T x);
    public T find(T x);
    public void clear();
}

现在,在另一堂课中,我正试图创造一个USetSet<T>的灵感。通常,这种语法适用于我的项目中使用整数传递的泛型。

USetSet<Integer> coolBag=new USetSet<Integer>(Integer.class);

但是,我不知道在这种情况下我是否需要将USet<T>传入USetSet<T>才能使其正常运行。有没有办法可以创建USetSet<T>的实例?

1 个答案:

答案 0 :(得分:0)

平凡的是,您可以使用new USetSet<>(null)创建它。当然,无论何时调用其中一个实例方法,它都会失败...

相反,只需创建一个实现USet接口的类,并将其传递给,例如。

new USetSet<>(new USet<Integer>() {
  // Implement methods.
})

或者:

class USetImpl implements USet<Integer> {
  // Implement methods.
}

new USetSet<>(new USetImpl())