1

这是代码

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将其称为接口。(如果您知道,请清除这种混淆,虽然这不是' t 主要问题)

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

4

3 回答 3

3

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

接口可以用作声明类型以保持基本行为协定相同。换句话说,当我有一个BasicFileAttributes对象时,我不知道它是真正的 aDosFileAttributes还是PosixFileAttributes引擎盖下的 a,我不在乎。我所关心的是我可以调用它上面的任何BasicFileAttributes方法并得到我期望的结果。

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

于 2012-10-15T16:53:51.327 回答
2

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

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

这类似于将 的实例传递File给方法:传递的不是实际的文件,而是可以管理该文件的对象。

于 2012-10-15T16:51:47.057 回答
0

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

是的。

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

于 2012-10-15T16:52:25.373 回答