以下代码取自this oracle tutorial:
public class FileVisitor extends SimpleFileVisitor<Path>
是否需要使用泛型?我不能得到泛型的这个方面。
为什么指定<Path>
,或更好地为什么SimpleFileVisitor
以这种方式声明?更好的是为什么设计师决定在这种情况下使用泛型?在它的方法中有路径参数..应该不够吗?
提前谢谢。
答案 0 :(得分:2)
使用
SimpleFileVisitor<Path>
它指定它需要Path而不是说File。由于SimpleFileVisitor未指定Path。
,因此方法不能没有泛型的Path答案 1 :(得分:2)
班级SimpleFileVisitor
具有通用方法参数(例如public FileVisitResult visitFileFailed(T file, IOException exc)
)。
你在FileVisitor中覆盖了它们,但是如果没有使用泛型类型,那么你就可以将“Whatherer”作为方法参数,编译器不会争论并且使用泛型你必须使用相同的类。覆盖方法中的参数(在本例中为Path
)类型在SimpleFileVisitor
中定义的所有方法中。
这只是清晰度和类型安全问题。
答案 2 :(得分:1)
实际上,在它的方法中有T参数,而T是由您指定的类声明声明的泛型参数。例如,如果类声明如下所示:
class AnotherFileVisitor extends SimpleFileVisitor<File>
这些方法看起来像这样:
visitFile(File file, BasicFileAttributes attrs)
等...