2013-05-13 57 views
2

在下面的代码从this甲骨文教程采取:这里泛型的需求是什么?

public class FileVisitor extends SimpleFileVisitor<Path> 

有任何需要使用泛型?我无法得到泛型的这个方面。 为什么要指定<Path>或更好为什么SimpleFileVisitor已被这样声明?更好的是为什么设计师决定在这种情况下使用泛型?在它的方法中有Path参数..它不应该足够吗? 在此先感谢。

+1

在我看来,做一大笔交易并不是秘密。泛型只是编译器的辅助工具。所以他可以生成一个编译错误,而不是运行时错误,难以剔除。 – reporter 2013-05-13 13:03:29

回答

1

不是,在它的方法中有T参数,T是通过你指定的类声明声明的通用参数。如果,例如,类声明是这样的:

class AnotherFileVisitor extends SimpleFileVisitor<File> 

的方法将寻找这样的:

visitFile(File file, BasicFileAttributes attrs) 

等等

2

通过使用

SimpleFileVisitor<Path> 

据规定,它需要路径,而不是说文件。由于SimpleFileVisitor不指定Path,所以方法不能没有泛型的Path。

2

SimpleFileVisitor具有泛型方法的参数(例如public FileVisitResult visitFileFailed(T file, IOException exc))。

你在FileVisitor中重写它们,但是如果没有使用泛型类型,那么你将能够将“Whatherer”作为方法参数,编译器不会争论,并且泛型被迫使用相同的类作为覆盖方法中的参数(在此例中为Path)键入SimpleFileVisitor中定义的所有方法。

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