【发布时间】:2021-07-27 01:18:36
【问题描述】:
我遇到了一些我不熟悉的带有泛型符号的示例代码:
vertx.eventBus().<JsonObject>consumer("sensor.updates", message -> {
JsonObject json = message.body();
...
});
注意调用 consumer() 之前的“
我理解它的作用,consumer() 采用泛型类型 T,我们告诉编译器在第二个参数中期望 JsonObject。来自EventBus.consumer 文档:
<T> MessageConsumer<T> consumer(String address, Handler<Message<T>> handler)
我想我只是在使用多年后看到不熟悉的泛型语法感到惊讶。是否有此符号的名称,或者我需要注意的任何非显而易见的行为?
【问题讨论】:
-
这里的教程中提到了(我自己还在寻找一个确切的答案):docs.oracle.com/javase/tutorial/java/generics/methods.html
-
啊,我想就是这样,它被称为type witness。当类型推断系统无法区分两个或多个泛型方法并且您必须指定您希望它使用哪一个。 docs.oracle.com/javase/tutorial/java/generics/…
-
重复链接也有一个答案,它解释了类型见证在 Java 7 中更有用,但是到 Java 8 改进了类型推断系统,您几乎不再需要类型见证了。
-
感谢@markspace。 Type Witness 正是我想要的。自从泛型存在之前我就一直在编写 Java,遇到一些让我说“这到底是什么东西?”的东西总是有点可怕/令人高兴。