这里的仿制药有什么需要?

时间:2013-05-13 12:58:08

标签: java generics signature

以下代码取自this oracle tutorial:

public class FileVisitor extends SimpleFileVisitor<Path>

是否需要使用泛型?我不能得到泛型的这个方面。 为什么指定<Path>,或更好地为什么SimpleFileVisitor以这种方式声明?更好的是为什么设计师决定在这种情况下使用泛型?在它的方法中有路径参数..应该不够吗? 提前谢谢。

3 个答案:

答案 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)

等...