2016-11-08 3 views
0

私は次のようにAssetManagerのopenFd()メソッドを使用してAssetFileDescriptorのインスタンスを構築しています:同じファイルを参照する場合、AssetFileDescriptorの2つのインスタンスが等しくないのはなぜですか?

String path = "myDir/myfile.wav"; 

AssetFileDescriptor descriptor = getAssets().openFd(path); 

AssetFileDescriptor descriptor2 = getAssets().openFd(path); 

boolean areEquals = descriptor.equals(descriptor2); 

をこの場合、areEqualsはAssetFileDescriptorクラスは、equals()メソッドをオーバーライドしていないため、falseです。

これは、AssetFileDescriptorインスタンスをHashMapのキーとして使用すると問題を引き起こします。

同じアセットファイルを参照するとき、AssetFileDescriptorの2つのインスタンスが等しいとは限りませんか?あなたのケースでは

+0

なぜ同じであるべきですか? – Blackbelt

+0

'AssetFileDescriptor'は間違いなくそのように使われることを意図していません。 – Henry

+0

@Blackbelt彼らは同じファイルを記述しているので、それらは等しいと思う。 – matdev

答えて

0

AssetFileDescriptorequals()を上書きすることはありませんので、あなたがequals()あなたは使用がObjectから来ているので、あなたが実行していたmehodeがあることを前提とする必要があります。

public boolean equals(Object paramObject) { 
     return (this == paramObject); 
    } 

それは平等に対応していますあなたはテストしたいですか? 無効にする必要がない場合AssetFileDescriptor.equals()

+0

私は本当に再実装していない[ソース](https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/res/AssetFileDescriptor.java)をチェックしました。 – litelite

+0

したがって、静的 'boolean AssetFileDescriptorUtils.equals(AssetFileDescriptor fd1、AssetFileDescriptor fd2){...}'と書くか、 'クラスMyAssetFileDescriptor extends AssetFileDescriptor'を書くことができます。 2番目の解決策は最悪の解決策です。 – Zorglube

関連する問題