Java 什么';这里需要泛型吗?

Java 什么';这里需要泛型吗?,java,generics,signature,Java,Generics,Signature,以下代码摘自oracle教程: public class FileVisitor extends SimpleFileVisitor<Path> 公共类FileVisitor扩展了SimpleFileVisitor 是否需要使用泛型?。我无法理解泛型的这一方面。 为什么指定是最基本的,或者更好的是为什么以这种方式声明了SimpleFileVisitor?更妙的是,为什么设计师决定在这种情况下使用泛型?在其方法中有路径参数。。这还不够吗? 提前感谢。使用 SimpleFileVis

以下代码摘自oracle教程:

public class FileVisitor extends SimpleFileVisitor<Path>
公共类FileVisitor扩展了SimpleFileVisitor
是否需要使用泛型?。我无法理解泛型的这一方面。 为什么指定
是最基本的,或者更好的是为什么以这种方式声明了
SimpleFileVisitor
?更妙的是,为什么设计师决定在这种情况下使用泛型?在其方法中有路径参数。。这还不够吗? 提前感谢。

使用

SimpleFileVisitor<Path>
SimpleFileVisitor

它指定它采用路径而不是文件。没有泛型的方法不能有Path,因为SimpleFileVisitor没有指定Path。

实际上,在它的方法中有t个参数,t是由指定的类声明声明传递的泛型参数。例如,如果类声明如下所示:

class AnotherFileVisitor extends SimpleFileVisitor<File>
visitFile(File file, BasicFileAttributes attrs)

等等。

SimpleFileVisitor
具有通用方法参数(例如,
公共文件VisitResult visitFileFailed(T文件,IOException exc)

您将在FileVisitor中重写它们,但如果没有使用泛型类型,您将能够将“whather”作为方法参数,编译器将不会争论,并且使用泛型,您将被迫在重写的方法中使用同一类作为参数(在本例中为
Path
)键入在
SimpleFileVisitor
中定义的所有方法


这只是一个清晰和字体安全的问题。

在我看来,没必要大惊小怪。泛型只是编译器的辅助工具。因此,他可以生成编译错误,而不是运行时错误,这是很难判断的。