Wrong 1st argument type. Found:List<java.lang.String>‘, required: ‘java.util.List<T>

错误:
在这里插入图片描述
代码

 @Test
    public void pl(){
        List<String> list=new ArrayList();
        list.add("1");
        list.add("1");
        Predicate<String> nonEmptyStringPredicate = (String s)->!s.isEmpty();
        List filter = filter2(list, nonEmptyStringPredicate);
        System.out.println(filter);
    }

    public    List<T> filter2(List<T> list, Predicate predicate){
        List<T> objects = new ArrayList<>();
        for (T s : list) {
            if (predicate.test(s)){
                objects.add(s);
            }
        }
        return objects;
    }

修改
在这里插入图片描述
原因
/**

  • 泛型方法的基本介绍
  • 说明:
  • 1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。
    
  • 2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
    
  • 3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
    
  • 4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。
    

是申明T为泛型,以区别于类名
即: List 中,第一个T是告诉大家,T不是类T.class,而是泛型T(如果只写List则编译器以为是类T.class,如果不存在T.class类,则报错)。

使用泛型绝不是因为要使参数可以传入任意类型,如果仅仅是这样,直接用Object就可以了。
用泛型是因为可以使该方法的返回值成为一个指定类型的集合,这样再次使用该集合的时候就有一个明确的类型了,这使的在将来该类型发生改变的时候编译器会报错,提醒你做相应的修改,而不是让问题暴露在运行阶段。这是泛型的重要作用之一。

没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

Object范围非常广,而T从一开始就会限定这个类型(包括它可以限定类型为Object)。

Object由于它是所有类的父类,所以会强制类型转换,而T从一开始在编码时(注意是在写代码时)就限定了某种具体类型,所以它不用强制类型转换。(之所以要强调在写代码时是因为泛型在虚拟机中会被JVM擦除掉它的具体类型信息,这点可参考泛型,在这里不做引申)。

比如在jdk中的List类是个泛型类。现在我们制定它的类型是Object。
List list = new ArrayList();
List本身是个泛型类,现在我们指定它接收Object类型的参数,此时就可以放置任意类型的参数进去,而在取出来是就必须得进行强制类型转换成具体的类型。
现在我们如果将List指定接收String类型的参数,那么这个List就只能放置String类型,且取出来时就不用进行强制类型转换。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值