Java泛型理解Type

标签 java generics

我正在学习 Java 泛型:https://docs.oracle.com/javase/tutorial/java/generics/bounded.html我对下面的代码示例有一些疑问:

public class Box<T> {

    private T t;          

    public void set(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }

    public <U extends Number> void inspect(U u) {
        System.out.println("T: " + t.getClass().getName());
        System.out.println("U: " + u.getClass().getName());
    }

    public static void main(String[] args) {
        Box<Integer> integerBox = new Box<Integer>();
        integerBox.set(new Integer(10));
        integerBox.inspect("some text"); // error: this is still String!
    }
}

为什么inspect()方法不按如下所示编写,而是这样写?

 public <T extends Number> void inspect(T t) { }

还有一些其他代码示例具有以下语法。第一对代表什么?

public <K,V> SomeClass<K,V>

静态代表什么?

public static <T> int countGreaterThan(T[] anArray, T elem)

最佳答案

方法Box.inspect()需要扩展 Number 的类型所以当参数是字符串时它不适用。

Box.inspect()只是应用于方法的泛型类型的示例。

另一方面,你有一个类Box具有通用类型 T ,但您也可以有一个接受另一种类型 U 的方法比 T 更宽(上限) .

类本身并没有说明如何使用inspect为什么,它只是给你处理不同类型的可能性。不要对这个样本抱有太大期望。

考虑到这只是一个解释如何使用泛型的示例(背后没有很好的逻辑)。

关于public class SomeClass<K,V>声明,这是一个具有多个泛型类型的声明。

类(class) HashMap<K,V>() 是本案例的真实样本,K是键值的类型,V是值的类型。

关于Java泛型理解Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44365985/

相关文章:

java - 什么是 com.android.tools.profiler.support.network.httpurl.HttpURLConnection?

java - 无法使用java将byte []插入MySQL

java - 如何将类的迭代器转换为其子类的迭代器?

在1.5上编译的java代码可以运行1.4环境

java - 为什么我的简单比较器坏了?

java - 指定注释处理器的顺序

java - 读取二维数组的问题 - Java

c# - 扩展方法中的两种泛型类型

c++ - 类型索引元组

java - 删除类型和桥接方法澄清