java泛型省略,写给大忙人看的——Java泛型基础篇

1.泛型类

1.1什么是泛型类?

泛型类是有一个或多个类型参数的类

如下所示:

public class Entry {

private K key;

private V value;

public Entry(K key, V value) {

this.key = key;

this.value = value;

}

public K getKey() { return key; }

public V getValue() { return value; }

}

这是一个用来存储键值对的泛型类。

1.2 如何实例化泛型类

Entry entry = new Entry<>("Apple", 22);

//等同于

Entry entry = new Entry("Apple", 22);

当构造一个泛型类对象时,可以在构造函数中省略类型参数。

注意: 在构造函数的参数前面,你仍需要提供一对空的尖括号。

2.泛型方法

2.1什么是泛型方法?

泛型方法是带类型参数的方法。泛型方法可以是普通类或者泛型类的方法。

如下所示:

public class ArrayUtil {

//当你声明一个泛型方法时,类型参数要放在修饰符(例如static)之后,返回类型之前。

public static void swap(T[] array, int i, int j) {

T temp = array[i];

array[i] = array[j];

array[j] = temp;

}

}

2.2如何调用泛型方法?

当你调用泛型方法时,不需要指定类型参数。它可以从方法的参数和返回类型中推断出来。

例如:

Apple[] apples = ....;

//这里编译器可以通过参数,推断出T是Apple类型。

ArrayUtil.swap(apples,0,1);

// 也可以在方法名称之前显式地提供类型

ArrayUtil.swap(apples,0,1);

3.类型限定

什么是类型限定?

有时候,我们需要类型参数满足某些要求,比如,要求该类型继承某些类或者实现某些接口。

import java.util.ArrayList;

public interface Animal {

void run();

}

class Dog implements Animal {

public void run() {

System.out.println("狗在跑");

}

}

class Cat implements Animal {

public void run() {

System.out.println("猫在跑");

}

}

class Main {

//这里限定了元素类型必须是Animal的子类

public static void runAll(ArrayList animals) {

for (T animal : animals) {

animal.run();

}

}

public static void main(String[] args) {

ArrayList animalArrayList = new ArrayList<>();

animalArrayList.add(new Dog());

animalArrayList.add(new Cat());

animalArrayList.add(new Dog());

animalArrayList.add(new Dog());

//如果尝试add(new Object()),编译会出错。

Main.runAll(animalArrayList);

}

}

类型参数可以有多个限定。

T extends Runable & AutoCloseable

你可以有多个接口限定,但最多只能有一个是类。如果有一个限定是类,则它必须放在限定列表的第一位。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值