Discuss / Java / 廖老师解释一下,super可以读是怎么回事

廖老师解释一下,super可以读是怎么回事

Topic source

public class Main {

public static void main(String[] args) {

        Pair<Number> p = new Pair<>(123, 456);

        int n = add(p);

        System.out.println(n);

    }

    static int add(Pair<? super Integer> p) {

        Integer first = (Integer)p.getFirst();

        Integer last = (Integer) p.getLast();

        return first.intValue() + last.intValue();

    }

}

class Pair<T> {

    private T first;

    private T last;

    public Pair(T first, T last) {

        this.first = first;

        this.last = last;

    }

    public T getFirst() {

        return first;

    }

    public T getLast() {

        return last;

    }

}

上面代码运行成功

  Integer first = (Integer) p.getFirst();

  Integer last = (Integer) p.getLast();

因为你强制转型了,改成以下试试,就会提示:Type mismatch: cannot convert from capture#1-of ? super Integer to Integer

 Integer first = p.getFirst();

 Integer last = p.getLast();

0刘俊铖

#4 Created at ... [Delete] [Delete and Lock User]

这个正如楼上所说,进行了强制类型转换,而且可能是由上向下的转换,这种强制类型转换可以过的了编译,但是在运行的时候会出现错误。你的代码相当于你已经知道输入必是Integer类型(输入别的,运行肯定会报错),那么这里使用泛型感觉没什么意义了。廖老师所说的<? super T>不可读,个人感觉可能是指无法在运行时,得知返回对象的具体类型,这样便不能调用具体方法了。如果进行强转,可能会出错。


  • 1

Reply