問題タブ [comparable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 引数をスーパー クラスの型にする必要がある場合の compareTo() のベスト プラクティス
クラスが Comparable を実装する場合の compareTo() メソッドの定義のベスト プラクティスを探しています。したがって、メソッドのシグネチャは
最初にすべきことは、arg がこのクラスのインスタンスかどうかを確認することです。そうであれば、クラスにキャストし、メンバーを比較します。しかし、引数がこのクラスのものではなく、BaseClass を実装する他のクラスのものである場合、何を返せば再帰的になるでしょうか?
ベスト プラクティスは、そのクラスに対してのみ compareTo() を定義することですが、その水はダムの上にあります。
java - Javaで複数のクラスを比較する方法は?
今、整数と文字列の配列をソートする at コンパレーターを書きました。コードからわかるように、2 つのクラスが同じでない場合、String クラスはより大きい値を取ります。ただし、これは 2 つのクラスしか許可しません。Float などの別のプリミティブ型を配列に追加したい場合はどうすればよいですか? if-else ステートメントにさらにコードを追加する必要があります。比較したい追加のクラスごとにステートメントを追加せずに比較を実装する方法はありますか?
出力:
java - パブリックインターフェイスITMark>>
今、私はこのインターフェースをクラスで実装したいと思います。だから私はそれをどのようにすべきですか?
これは方法ですが、エラーをスローします
私は以下を取得しています:
このコードをEclipseIDEに実装しています
java - インターフェイスが Comparable を拡張する列挙型を使用してインターフェイスを実装する方法は?
次のコードを検討してください。
タイプ消去の制限により、次のエラーが表示されます。
java.lang.Comparable は異なる引数で継承できません:
<Foo>
および<FooImpl>
次の要件があります。
FooImpl
注釈のデフォルト値として使用する必要があるため、列挙型である必要があります。- 私のインターフェースの契約は、それが比較可能である必要があるということです。
インターフェイスでジェネリック境界を使用しようとしましたが、これは Java ではサポートされていません。
java - compareTo()が0を返す場合、オブジェクトが等しいと暗示されるのはなぜですか?
クラスを作りましょうPerson
。人には名前と身長があります。
EqualsおよびhashCode()は、名前のみを考慮します。人は同等です(または、コンパレータを実装します。どちらでも構いません)。人は身長で比較されます。
2人の異なる人が同じ身長を持つことができる状況を予想することは合理的であるように思われますが、例えば。TreeSetは、comapareTo()== 0のように動作します。これは、単に同じサイズではなく、等しいことを意味します。
これを回避するために、サイズが同じである場合、比較は二次的に他の何かを調べることができますが、同じサイズの異なるオブジェクトを検出するために使用することはできません。
例:
結果:
なぜそうなのか分かりますか?
java - Java Generics、Inconvertible type、typecasting、heap d-ary
これは、d-aryヒープのremoveメソッドです。コンパイルすると、多くの「変換不可能なタイプ」エラーが発生します。また、私のプログラムはComparableを拡張していることに注意してください。
私の配列はオブジェクト型ではなくT型であることを知っています。
質問:すべてがタイプTであるべきだと理解していますが、コードを書いているときに「タイプTをタイプINTに変換できません」というエラーがたくさん出たので、タイプキャストして同じタイプ(T)にすることにしました。 (整数)。「変換不能タイプ」エラーが発生するため、これを行うのが間違っていたことに気づきました。Java Genericsについて高い理解を持っている人は、タイプTのすべてを維持するためのテクニックとヒントを教えてください。
エラー:型キャスト(整数)時に発生します。必要に応じてすべてのコードを投稿できますが、これで十分だと思います。
java - エクスポートされ、署名された apk と Eclipse デバッガーで実行されているバージョンの違いは? 問題を引き起こすシリアライズ可能なクラス
うまくいけば、これは長すぎることではありませんが、完全にしようとしています:
だから私はAndroidマーケットにアプリを持っています。アプリ内には、いくつかのシリアライズ可能なクラスがあります。アプリはどこでも正常に動作しています (エミュレーター、デバッグ電話、アプリをダウンロードする電話)。
いくつかの機能を追加することにしました。これらの機能には、私の Serializable クラスの 1 つに Comparable を実装することが含まれます。Eclipse (エミュレーターまたは接続された電話) では、変更は有効に見えます。また、このJavaドキュメントによると、変更はSerializableクラスへの有効な変更だと思います。
今問題に。署名済み apk をエクスポートした後、アプリがクラッシュしたようです。クラッシュは、変更されたクラスに初めて触れたときに発生します。スタック トレースは難読化されており、詳細はあまり重要ではありませんが (私が思うに)、アプリをクラッシュさせる NullPointerException です。
私の実験から変更されたコードは次のとおりです。
同等のバージョン:
追加された方法で:
通常版・オリジナル版:
追加のメソッドなし。
それ以外の場合、クラスは同じです。getName() は文字列を返すことに注意してください。
次の実験を行いました。
- スマートフォンからアプリを完全にアンインストールします。
- コードに相当する変更を加えずにアプリをビルドし、Eclipse を介して携帯電話で実行します。(正常に動作します)。
- Comparable の変更を実装し、Eclipse を介して携帯電話で実行します。(正常に動作します)。
ここでは問題ありません。ここで、上記の各ビルドの署名付きバージョンをエクスポートしました。
- スマートフォンからアプリを完全にアンインストールします。
- 同等の変更なしでアプリの署名済みバージョンをエクスポートします。次を使用して電話にアップロードします: adb install com.myapp (正常に実行されます)。
- 同等の変更を加えた署名付きバージョンのアプリをエクスポートします。adb を使用してアップロードします。以前に保存されたアクセス時にクラッシュします (NullPointerException)。
そして、健全性チェックとして、次のことを行いました。
- 電話からアプリを完全にアンインストールします。
- 同等の変更を加えて、エクスポートされ、署名されたバージョンのアプリをインストールします。問題はありません。
手順 1. と 2. の間でアンインストールしない理由は、エンド ユーザーが更新間で自分のデータを保持することをシミュレートするためであることに注意してください (ここでの重要な機能)。また、上記の最終的なサニティ チェックにより、Serializeable クラスへの変更に伴う問題であることがかなり確実に感じられることに注意してください。
基本的な質問は次のとおりです。署名され、エクスポートされたアプリと、Eclipse 内から実行されるバージョンの違いは何ですか? Serializable クラスへの有効な変更がエクスポート後にアプリを壊す理由はありますか?
java - 比較可能なコンパレータ Java
これが私のコードです
また、Comparableを実装するクラスBOXがあります。今、皆さんに助けていただきたい質問がいくつかあります。
1.メソッドは、同等のインターフェイスで宣言され、システムで定義されていますcompareTo
か?
2. Arrays.sort メソッドの実装を提供しませんでした。その場合、どのように要素をソートしますか?
3.Comparator
の代わりに使用するときはcomparable
、次を使用します。
//上記のコードでは、しかし、ボックスはまだ.iestudentbyname implements comparator
を実装していますcomparable
今私はやっていますがArrays.sort(students,c1)
、なぜ今c1を渡しているのですか?
scala - Scalaの同等の特性とは何ですか?
C#IComparableに対応するScalaを探していますが、Comparableの特性が見つかりました。つまり-Comparableが言及されていますが、http: //www.scala-lang.org/api/current/scala/で検索すると、ヒット数は0になります。その名前のおかげで、Googleを使用すると、「Scalaが...に匹敵する」という結果がたくさん得られます。
この神秘的な比較可能なものについて私が読むことができるリソースはありますか?結局、Orderedはそれを拡張するので、存在する必要があります。
scala - ScalaでバインドされていないComparableを並べ替える
私はOrdering
'sを使用したScalaでのソートにある程度慣れていますが、Javaで定義されているいくつかのオブジェクトをソートしたいと思います。それらはComparable
(ではなくComparable[T]
)そしてfinal
:
(これは実際にはLuceneのTermクラスであり、Luceneのバージョンを変更することはできません)。
私は最初、暗黙のどこかにあることを望みました:
だから多分私はそれを注文することができますか?
この後、私は使用の厄介さに頼ると思いましたjava.util.Collections.sort
:
したがって、Scalaは型パラメーターに厳密であるため、これでも機能しないようです。この時点で、2つの方法がわかります。別の明示的な順序を再実装する(悪い)か、Javaでソートを記述する(それほど悪くはない)。
Scalaでこれをきれいに行う方法はありますか?この状況は、レガシーJavaオブジェクトを使用する場合に一般的である可能性があると思いますか?