java方法定义泛型,Java-泛型方法

package Hello1;

import java.util.List;

import java.util.ArrayList;

public class Test8 {

//需求假如我要将一个数组类型的所有元素复制到集合中,怎么写

//更进一步,如果我想要对T的类型做出限制,怎么限制

public static void main(String[] args) {

Test8 t8 = new Test8();

List l1 = new ArrayList<>(); //泛型两边都要保持一致 右边可以不写

List l2 = new ArrayList<>();

List l3 = new ArrayList<>();

List l4 = new ArrayList<>();

List l5 = new ArrayList<>();

copy(new String[]{}, l1); //定义字符串类型的数组 然后赋值给os

copy(new Number[]{}, l2); //定义字符串类型的数组 然后赋值给os

copy(new Integer[]{}, l3); //定义字符串类型的数组 然后赋值给os

copy(new Double[]{}, l4); //定义字符串类型的数组 然后赋值给os

copy(new Comparable[]{}, l5); //定义字符串类型的数组 然后赋值给os

copy(new Double[]{}, l4); //定义字符串类型的数组 然后赋值给os

//这时候list类型是String,但是Object[] os则是Double类型,但是此时String对象是不能被放进Double数组的

//所以如下面那种方法是编译错误的

}

static void copy(T[] os,List list) {

//static void copy(T[] os,List list) { //编译错误 ,super只能用在泛型通配符上,不能用在泛型方法上

// static void copy(T[] os,List list) { //Number和子类都能通过

//用字母T要约束数组os和集合list的类型 T可以是其他的字母,但是习惯用大写T

//假如T是String类型,那么其余所有的T都是String类型,这就解决了基本需求

for(T o: os) { //遍历

list.add(o);

}

}

// static void copy(T[] os,List list) {

// //用字母T要约束数组os和集合list的类型 T可以是其他的字母,但是习惯用大写T

// //假如T是String类型,那么其余所有的T都是String类型,这就解决了基本需求

// for(T o: os) { //遍历

// list.add(o);

// }

// }

// static void copy(Object[] os,List> list) { //Object[] 表示Object类型的数组

// //问题:如果用通配符通配所有类型的集合,add方法明显是编译出错的

// //理由:编译器看来list是有泛型的,所以不确定os数组,是否都能符合泛型要求 所以报错

// //思路:所以得让数组类型与泛型类型是一致的

// for(Object o: os) { //遍历

// list.add(o);

// }

// }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值