为了账号安全,请及时绑定邮箱和手机立即绑定

方法的冗余声明

方法的冗余声明

繁星coding 2023-08-04 15:27:44
我想知道这两种方法的声明是否存在逻辑差异:示例1public static <T extends Comparable<? super T>> T findMax(List<? extends T> list)示例2public static <T extends Comparable<? super T>> T findMax(List<T> list)有人告诉我,这部分<? extends T>相当于<T>第一个示例中的通配符,并且通配符是多余的,他建议我使用第二个示例中的代码。是对的吗?
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

他们不一样。


向这个“某人”展示这个反证:)


class Scratch

{

    interface A extends Comparable<A> {}

    interface B extends A {}


    public static <T extends Comparable<? super T>> T findMax(List<? extends T> list)

    {

        return null;

    }


    public static <T extends Comparable<? super T>> T findMax2(List<T> list)

    {

        return null;

    }


    public static void main(String[] args)

    {

        List<B> listOfBs = new ArrayList<>();


        A foo = Scratch.<A>findMax(listOfBs);  // fine

        A bar = Scratch.<A>findMax2(listOfBs); // compiler error

    }

}


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信