以下代码取自本oracle 教程:
public class FileVisitor extends SimpleFileVisitor<Path>
有没有必要使用泛型?我无法得到泛型的这个方面。为什么指定 是基本的<Path>
,或者更好的是为什么SimpleFileVisitor
以这种方式声明?更好的是为什么设计师决定在这种情况下使用泛型?在它的方法中有路径参数..难道还不够吗?提前致谢。
通过使用
SimpleFileVisitor<Path>
它指定它采用路径而不是文件。由于 SimpleFileVisitor 没有指定 Path,因此这些方法不能有没有泛型的 Path。
该类SimpleFileVisitor
具有通用方法参数(例如public FileVisitResult visitFileFailed(T file, IOException exc)
)。
您在 FileVisitor 中覆盖它们,但如果没有使用泛型类型,您可以将“Whatherer”作为方法参数,编译器不会争论,并且拥有泛型,您将被迫使用相同的类作为参数重写的方法(在这种情况下Path
)键入在中定义的所有方法SimpleFileVisitor
。
这只是一个清晰和类型安全的问题。
不是真的,在它的方法中有 T 个参数,而 T 是由您指定的类声明声明的泛型参数。例如,如果类声明如下所示:
class AnotherFileVisitor extends SimpleFileVisitor<File>
这些方法看起来像这样:
visitFile(File file, BasicFileAttributes attrs)
ETC...