“BasicFileAttributes.class”符号在java7中的含义是什么?

时间:2012-10-15 16:46:09

标签: java

这是代码

Path file = ...;
BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);
System.out.println("creationTime: " + attr.creationTime());
System.out.println("lastAccessTime: " + attr.lastAccessTime());
System.out.println("lastModifiedTime: " + attr.lastModifiedTime());


在链接  http://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html,他们说BasicFileAttributes是一个类。但链接http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/BasicFileAttributes.html将其称为接口。(如果您知道,请清除这种混淆,尽管这不是主要问题)

主要问题:
我无法理解 BasicFileAttributes.class 参数。他们是否试图传递一个类作为参数?

3 个答案:

答案 0 :(得分:3)

BasicFileAttributes被定义为一个接口,因为它指定了行为(在本例中是文件属性信息的访问器方法),并且有一些子类以实现定义的方式提供它。文档页面将DosFileAttributesPosixFileAttributes列为已知的子类。

接口可以用作声明的类型,以保持基本行为契约相同。换句话说,当我有一个BasicFileAttributes对象时,我不知道它是否真的是DosFileAttributesPosixFileAttributes,我不在乎。我所关心的只是我可以调用任何BasicFileAttributes方法并得到我期待的结果。

对于Files.readAttributes方法,是的,您正在传入一个类。在这种情况下,您可以使用BasicFileAttributes.class获取基本文件属性,也可以传入其中一个子类并获取特定于平台的信息(如果您要求平台上不存在的属性,则可能需要处理UnsupportedOperationException。)

答案 1 :(得分:1)

BasicFileAttributes是一个接口,但在口语表达式中通常使用诸如“BasicFileAttributes class”之类的短语来表示“实现BasicFileAttributes的类”。

至于您的主要问题,您正在传递特殊Java类java.lang.Class的实例。所以不,你不是“传递一个类”(这个概念在Java中实际上毫无意义)。您正在传递java.lang.Class的实例,描述界面 BasicFileAttributes

这类似于将File的实例传递给方法时:您没有传入实际文件,而是传递该文件的对象。

答案 2 :(得分:0)

  

他们是否试图将一个类作为参数传递?

接口具有关联的.class文件,这些文件也描述了它们的元数据。这里的后缀或类文件的使用并不一定意味着被引用的类型是“类”,因为它不是接口或枚举。