小编Tom*_*ski的帖子

Java中的高级多态性

我在我的大学开设了高级编程课程,我对理解这段代码的工作方式有点麻烦.

public final class GenericClass<T> {
    private void overloadedMethod(Collection<?> o) {
        System.out.println("Collection<?>");
    }

    private void overloadedMethod(List<Number> o) {
        System.out.println("List<Number>");
    }

    private void overloadedMethod(ArrayList<Integer> o) {
        System.out.println("ArrayList<Integer>");
    }

    public void method(List<T> l) {
        overloadedMethod(l);
    }

    public static void main(String[] args) {
        GenericClass<Integer> test = new GenericClass<Integer>();
        test.method(new ArrayList<Integer>());
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这段代码会打印"Collection <?>"?

java generics polymorphism parametric-polymorphism

19
推荐指数
1
解决办法
2809
查看次数

方法参考 - 使用Consumer参数将Function传递给方法

我正在学习Java 8中的方法参考,我很难理解为什么这有效?

class Holder {
    private String holded;

    public Holder(String holded) {
        this.holded = holded;
    }

    public String getHolded() {
        return holded;
    }
}

private void run() {
    Function<Holder, String> getHolded = Holder::getHolded;

    consume(Holder::getHolded); //This is correct...
    consume(getHolded);         //...but this is not
}

private void consume(Consumer<Holder> consumer) {
    consumer.accept(null);
}
Run Code Online (Sandbox Code Playgroud)

正如您在run方法中看到的那样- Holder::getHolded返回未绑定的方法引用,您可以通过将类型的对象Holder作为参数传递来调用它.像这样:getHolded.apply(holder)

但是为什么它将这个未绑定的方法引用转换Consumer为直接作为方法参数调用的时候,并且在我Function明确传递时它不会执行它?

java-8 functional-interface method-reference

4
推荐指数
1
解决办法
115
查看次数