调用方法之前的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
    }