飘逸的哑铃 · 深度学习与传统机器视觉的对比_训练· 7 月前 · |
坏坏的针织衫 · Java实现AES/CBC/PKCS7Pad ...· 1 年前 · |
开朗的丝瓜 · unix - How to pretty ...· 1 年前 · |
激动的抽屉 · sql - Error Code: ...· 1 年前 · |
风流倜傥的高山 · layui首页logo一般放在哪里-掘金· 1 年前 · |
java 中泛型标记符:
E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Java 类) K - Key(键) V - Value(值) N - Number(数值类型) ? - 表示不确定的 java 类型 下面的例子演示了如何使用泛型方法打印不同类型的数组元素:
要声明一个有界的类型参数,首先列出类型参数的名称,后跟extends关键字,最后紧跟它的上界。
下面的例子演示了"extends"如何使用在一般意义上的意思"extends"(类)或者"implements"(接口)。该例子中的泛型方法返回三个可比较对象的最大值。
和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。 如下实例演示了我们如何定义一个泛型类:
1、类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?> 在逻辑上是 List<String>,List<Integer> 等所有 List<具体类型实参> 的父类。
输出结果为:
data :icon data :18 data :314 因为 getData() 方法的参数是 List<?> 类型的,所以 name,age,number 都可以作为这个方法的实参,这就是通配符的作用。2、类型通配符上限通过形如List extends Number>来定义,如此定义就是通配符泛型值接受Number及其下层子类类型。
输出结果:
data :18 data :314 在 //1 处会出现错误,因为 getUperNumber() 方法中的参数已经限定了参数泛型上限为 Number ,所以泛型为 String 是不在这个范围之内,所以会报错。3、类型通配符下限通过形如 List<? super Number> 来定义,表示类型只能接受 Number 及其上层父类类型,如 Object 类型的实例。
小猪阿怀
met***@yeah.net
hunter
hun***es@126.com
lucius_ni
447***003@qq.com
雨中漫步丶
137***5581@qq.com
在泛型中可以声明多个类型参数。为了指定两个或更多个类型参数,只需要使用逗号分隔参数列表即可。
package test; //指定了两个类型参数:T和V,使用逗号将它们隔开。 public class Box<T, V> { private T obj1; private V obj2; public Box(T o1,V o2) { obj1 = o1; obj2 = o2; public void showTypes() { System.out.println("Type of T is " + obj1.getClass().getName()); System.out.println("Type of V is " + obj2.getClass().getName()); public T getObj1() { return obj1; public V getObj2() { return obj2; public static void main(String[] args) { //创建对象时必须为Box传递两个类型参数,这里Integer替换T,String替换V。 Box<Integer,String> testObj1 = new Box<>(88,"Runoob"); testObj1.showTypes(); int t1 = testObj1.getObj1(); System.out.println("value: " + t1); String v1 = testObj1.getObj2(); System.out.println("value: " + v1); System.out.println("-----------------------------"); //在这个例子中,尽管两个类型参数是不同的,但是可以将两个类型参数设置为相同的类型。这T,V都是String类型 Box<String,String> testObj2 = new Box<>("Hello","Runoob"); testObj2.showTypes(); String t2 = testObj2.getObj1(); System.out.println("value: " + t2); String v2 = testObj2.getObj2(); System.out.println("value: " + v2); 输出结果:Type of T is java.lang.Integer Type of V is java.lang.String value: 88 value: Runoob ----------------------------- Type of T is java.lang.String Type of V is java.lang.String value: Hello value: Runoob注:泛型的类型参数使用大写形式,且比较短,一般一个字母。在java库中,使用变量E表示集合的元素类型。K和V分别表示键与值的类型,比如:Map的键与值。T(需要时还可以用临近的字母U和S)表示“任意类型”。