java - 调用方法之前的 Java 泛型表示法是什么?

标签 java generics

<分区>

我遇到了一些示例代码,其中包含我不熟悉的泛型符号:

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)

我想我只是在使用多年后看到不熟悉的泛型语法感到惊讶。是否有此表示法的名称或我需要注意的任何非显而易见的行为?

最佳答案

泛型一般有两种类型,分别是

  1. 泛型类型
  2. 泛型方法

泛型类型

您可以在您的类或接口(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

问候

关于java - 调用方法之前的 Java 泛型表示法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67389080/

相关文章:

java - JPA 和泛型

java - 如何解析这些json字符串呢? (使用gson)

java - 在 Spring boot kafka 上添加分区需要一些时间才能生效

java - 在java中为什么我们不能直接将int赋值给char???但反之亦然?

java - 如何获取参数化类实例

c# - 将函数从 C++ 转换为 C#

generics - 了解Rust中的通用FromIterator

java - 如何在linux (debian) 上的Eclipse 中查看JRE 的源代码

java - Android 抽象类坏魔法空指针

c# - 实体泛型 dbSet 获取数据表