这个Java类型签名是什么意思?

时间:2018-12-04 21:58:04

标签: java

我对Java不是很坚强。有人可以解释我在antlr代码库中找到的这一行代码吗?是否是一个名为accept的函数,该函数返回一个类型为T且参数类型为ParseTreeVisitor且扩展了T且称为var1的类型<T>的对象,而// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package org.antlr.v4.runtime.tree; import org.antlr.v4.runtime.Parser; public interface ParseTree extends SyntaxTree { ParseTree getParent(); ParseTree getChild(int var1); <T> T accept(ParseTreeVisitor<? extends T> var1); << I don't get this line String getText(); String toStringTree(Parser var1); } 开头只是整个方法签名的类型参数?

dataType

1 个答案:

答案 0 :(得分:3)

T被称为通用类型。像这样使用时,表示“ 我不知道这里要使用哪种类型,但是我想知道在所有使用它的地方都一样”。

您可以改为在所有地方使用Object,这将允许使用任何类型,因为Java中的每种类型都是Object的子类型:

Object accept(ParseTreeVisitor<Object> var1);

但是随后,编译器将无法保证参数(var1)与返回类型之间的任何关联。

然后回到您的示例:

<T> T accept(ParseTreeVisitor<? extends T> var1);
--- -                         - ---------
 1  2                         3     4
  1. 定义通用类型T,现在可以在此函数定义中的任何位置使用它。
  2. 将返回类型指定为完全T
  3. ?指定ParseTreeVisitor的类型参数可以是任何......
  4. ...并且这将其限制为扩展T的任何类型(包括T本身)。

本质上,此方法签名保证var1的类型参数将是返回类型的子类型(或与返回类型相同),但未指定这些类型是什么。