Java泛型类只接受特定的类类型?

时间:2014-03-05 06:39:45

标签: java

我正在使用JAVA7。我需要使用泛型来编写类,这些泛型将作用于特定的类。我怎么写?

班级名称:SomeClass.java 它应该只接受SomeOtherClass.java的类类型。

我可以写下面的内容吗?

public class SomeClass<SomeOtherClass> {


}

谢谢!

2 个答案:

答案 0 :(得分:2)

不,你不能像你所说的那样写。您的表示法声明了一个名为SomeOtherClass的新类型变量。它与SomeOtherClass类型无关。

而是声明一个类型变量并给它一个绑定

public class SomeClass<T extends SomeOtherClass> {

现在,类型变量T的上限为SomeOtherClass

这意味着SomeClass类型的参数化使用必须提供SomeOtherClass或其任何子类型的类型参数。

答案 1 :(得分:0)

你是什么意思&#34;接受&#34;只有一种类型?从我猜测的问题来看,你并不确切知道什么是仿制药。

public class SomeClass<T> {
    private T it;

    public T getIt() {
        return it;
    }

    public void setIt(T it) {
        this.it = it;
    }
}

public static void main(String...args) {
    SomeClass<String> someClass = new SomeClass<String>();
    someClass.setIt("this is it!");
    System.out.println(someClass.getIt());
}

此示例中的泛型允许您(开发人员编写main方法)指定哪种类型T使代码更清晰,更安全,因为编译器可以检查您确实使用了您定义的类型。如果你想尝试:

someClass.setIt(5);

这会产生编译器错误,因为您将其定义为String。

在这方面,没有必要只定义一个特定的类。你可以做的是:

public class SomeClass<T extends SomeOtherClass>

这使您可以说开发人员必须将T定义为SomeOtherClass的扩展。这意味着当在SomeClass中使用T时,您(和编译器)可以假设它至少是SomeOtherClass类型并使用那里可用的任何方法。