在下面的代码从this甲骨文教程采取:这里泛型的需求是什么?
public class FileVisitor extends SimpleFileVisitor<Path>
有任何需要使用泛型?我无法得到泛型的这个方面。 为什么要指定<Path>
或更好为什么SimpleFileVisitor
已被这样声明?更好的是为什么设计师决定在这种情况下使用泛型?在它的方法中有Path参数..它不应该足够吗? 在此先感谢。
在下面的代码从this甲骨文教程采取:这里泛型的需求是什么?
public class FileVisitor extends SimpleFileVisitor<Path>
有任何需要使用泛型?我无法得到泛型的这个方面。 为什么要指定<Path>
或更好为什么SimpleFileVisitor
已被这样声明?更好的是为什么设计师决定在这种情况下使用泛型?在它的方法中有Path参数..它不应该足够吗? 在此先感谢。
不是,在它的方法中有T参数,T是通过你指定的类声明声明的通用参数。如果,例如,类声明是这样的:
class AnotherFileVisitor extends SimpleFileVisitor<File>
的方法将寻找这样的:
visitFile(File file, BasicFileAttributes attrs)
等等
通过使用
SimpleFileVisitor<Path>
据规定,它需要路径,而不是说文件。由于SimpleFileVisitor不指定Path,所以方法不能没有泛型的Path。
类SimpleFileVisitor
具有泛型方法的参数(例如public FileVisitResult visitFileFailed(T file, IOException exc)
)。
你在FileVisitor中重写它们,但是如果没有使用泛型类型,那么你将能够将“Whatherer”作为方法参数,编译器不会争论,并且泛型被迫使用相同的类作为覆盖方法中的参数(在此例中为Path
)键入SimpleFileVisitor
中定义的所有方法。
这只是一个清晰和类型安全的问题。
在我看来,做一大笔交易并不是秘密。泛型只是编译器的辅助工具。所以他可以生成一个编译错误,而不是运行时错误,难以剔除。 – reporter 2013-05-13 13:03:29