调用方法之前的Java泛型表示法是什么?
我遇到了一些我不熟悉的带有泛型符号的示例代码:调用方法之前的Java泛型表示法是什么?,java,generics,Java,Generics,我遇到了一些我不熟悉的带有泛型符号的示例代码: vertx.eventBus().<JsonObject>consumer("sensor.updates", message -> { JsonObject json = message.body(); ... }); vertx.eventBus().consumer(“sensor.updates”,消息->{ JsonObject json=message.body(); ... }); 请
vertx.eventBus().<JsonObject>consumer("sensor.updates", message -> {
JsonObject json = message.body();
...
});
vertx.eventBus().consumer(“sensor.updates”,消息->{
JsonObject json=message.body();
...
});
请注意调用consumer()之前的“”
我理解它的作用,consumer()接受泛型类型T,我们告诉编译器在第二个参数中需要一个JsonObject。从文档中:
MessageConsumer消费者(字符串地址,处理程序)
我想我只是很惊讶在使用了很多年之后看到了不熟悉的泛型语法。这个符号或任何不明显的行为都有名称吗?泛型通常有两种类型,它们是
public interface Container<T> {
T first();
T last();
void add(T data);
List<T> getAll();
}
public class MyContainer<T> implements Container<T> {
// Implementations
}
公共接口容器{
T首先();
T last();
无效添加(T数据);
List getAll();
}
公共类MyContainer实现容器{
//实现
}
泛型方法
类型参数也可以在方法中定义,这些被称为泛型方法。您可以在所有方法中定义泛型,例如静态方法和实例方法。你问的问题是泛型方法
public static <T> void printTwoTimes(T data) {
// Codes
}
公共静态无效打印两次(T数据){
//代码
}
通过在一个方法中引入类型参数,该方法可以得到类型抽象,并且可以以类型安全的方式与各种类型一起使用
这是关于泛型方法的官方参考
关于这里的教程中提到过(我自己仍在寻找确切的答案):啊,我想就是这样,它被称为类型证人。当类型推理系统无法区分两个或多个泛型方法,并且您必须指定希望它使用哪一个时,可以使用它。重复链接还有一个答案,解释了类型见证在Java7中更有用,但是Java8改进了类型推理系统,您几乎不再需要类型见证。相关:谢谢@markspace。类型证人正是我要找的。在泛型出现之前,我就一直在编写Java,遇到一些让我说“那到底是什么东西?”的东西总是有点恐怖/愉快,不幸的是,这并没有真正回答问题。
public static <T> void printTwoTimes(T data) {
// Codes
}