2

以下代码取自oracle 教程:

public class FileVisitor extends SimpleFileVisitor<Path>

有没有必要使用泛型?我无法得到泛型的这个方面。为什么指定 是基本的<Path>,或者更好的是为什么SimpleFileVisitor以这种方式声明?更好的是为什么设计师决定在这种情况下使用泛型?在它的方法中有路径参数..难道还不够吗?提前致谢。

4

3 回答 3

2

通过使用

SimpleFileVisitor<Path>

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

于 2013-05-13T13:04:12.253 回答
2

该类SimpleFileVisitor具有通用方法参数(例如public FileVisitResult visitFileFailed(T file, IOException exc))。

您在 FileVisitor 中覆盖它们,但如果没有使用泛型类型,您可以将“Whatherer”作为方法参数,编译器不会争论,并且拥有泛型,您将被迫使用相同的类作为参数重写的方法(在这种情况下Path)键入在中定义的所有方法SimpleFileVisitor

这只是一个清晰和类型安全的问题。

于 2013-05-13T13:05:12.280 回答
1

不是真的,在它的方法中有 T 个参数,而 T 是由您指定的类声明声明的泛型参数。例如,如果类声明如下所示:

class AnotherFileVisitor extends SimpleFileVisitor<File>

这些方法看起来像这样:

visitFile(File file, BasicFileAttributes attrs)

ETC...

于 2013-05-13T13:04:53.747 回答