我遇到了一些我不熟悉的泛型符号的示例代码:
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)
我想我只是惊讶地发现,在使用了多年之后,不熟悉的泛型语法。这个符号或者任何不明显的行为都有名字吗?
一般来说,泛型有两种类型,分别是
您可以在类或接口中使用类型参数。在类型中使用的泛型称为泛型类型。
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