当前位置: 首页 > 知识库问答 >
问题:

这是什么Java泛型符号之前的方法调用?[复制]

郑衡
2023-03-14

我遇到了一些我不熟悉的泛型符号的示例代码:

vertx.eventBus().<JsonObject>consumer("sensor.updates", message -> {
  JsonObject json = message.body();
  ...
});

请注意“

我明白它的作用,消费者()接受一个泛型类型T,我们告诉编译器在第二个参数中期望一个JsonObject。从EventBus.consumer文档中:

<T> MessageConsumer<T> consumer(String address, Handler<Message<T>> handler)

我想我只是惊讶地发现,在使用了多年之后,不熟悉的泛型语法。这个符号或者任何不明显的行为都有名字吗?

共有1个答案

何灿
2023-03-14

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

  1. 仿制药类型
  2. 泛型方法

您可以在类或接口中使用类型参数。在类型中使用的泛型称为泛型类型。

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

问候

 类似资料:
  • 问题内容: 例如,在以下代码中 返回类型之前的目的是什么(该行的作用或如何读取) 问题答案: 这是使您的 方法 (而不是 类 )通用的语法。 常规类和泛型类的方法可以根据其自身的类型参数进行泛型。在这种情况下,您的方法是on的通用方法,它必须是从扩展的类型。

  • 我试图理解为什么我们需要通配符——Java泛型中的问号,为什么我们不能使用普通的单字符t或E等作为类型?请看以下示例: 结果是一样的,尽管通配符版本更简洁。这是唯一的好处吗?

  • 问题内容: 以下这部分代码是什么意思?我什至不知道这个语法叫什么。 这是原始代码(可从此处找到:http : //developer.android.com/guide/components/processes-and- threads.html ): 问题答案: 告诉AsyncTask使用3种不同的类型进行描述,当您使用AsyncTask时,将String作为第一个参数,将Void作为第二个参数

  • 我一直在尝试泛型,很快我就遇到了一些我无法解释的事情 例如: 我不明白

  • 问题内容: 我想知道用这样的签名调用静态方法的正确方法是什么: 由于某种原因,我很想这样称呼它: 但是除非我将其更改为:否则它不会编译: 我只是想知道为什么它不需要右侧的提示。而是给了我编译错误。它说它期望在右侧的提示后加上分号。第二个方法是调用该方法的正确方法吗?有人可以给我一些启示吗? 问题答案: 如图所示这里,要调用的方法的方法是: 该方法所在的类的名称在哪里。

  • 我试图理解为什么编译器无法解析方法调用。我希望总是选择,因为由于的上限而永远不能匹配。 如果不适用,即使单独使用(如)所示),那么唯一的选择肯定是,这将是一个非歧义的重载。 为什么调用不明确,尤其是当和调用本身不是有效的解析时? 上面代码的可运行示例:https://www.jdoodle.com/ia/kqp