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オブジェクトを持っているとき、それが本当にボンネットの下にあるのか、DosFileAttributesそれともPosixFileAttributesボンネットの下にあるのかわからないので、私は気にしません。私が気にしているのは、そのBasicFileAttributesメソッドのいずれかを呼び出して、期待する結果を得ることができるということだけです。

メソッドに関してはFiles.readAttributes、はい、クラスを渡します。この場合、を使用して基本的なファイル属性を取得するかBasicFileAttributes.class、そのサブクラスの1つを渡して、プラットフォーム固有の情報を取得できます(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 に答える