我遇到了一些示例代码,其中包含我不熟悉的泛型符号:
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)
我想我只是在使用多年后看到不熟悉的泛型语法感到惊讶。是否有此表示法的名称或我需要注意的任何非显而易见的行为?
泛型一般有两种类型,分别是
- 泛型类型
- 泛型方法
泛型类型
您可以在您的类或接口(interface)中使用类型参数。在类型中使用的泛型称为泛型类型。
public interface Container<T> {
T first();
T last();
void add(T data);
List<T> getAll();
}
public class MyContainer<T> implements Container<T> {
// Implementations
}
泛型方法
类型参数也可以在方法中定义,这些被称为泛型方法。您可以在所有方法中定义泛型,例如静态方法和实例方法。你问的问题是泛型方法。
public static <T> void printTwoTimes(T data) {
// Codes
}
通过在方法中使用类型参数,该方法可以获得类型抽象并且可以以类型安全的方式与各种类型一起使用。
这是关于泛型方法的官方引用。
https://docs.oracle.com/javase/tutorial/extra/generics/methods.html
问候