2015-12-08 6 views
5
public int compareTo(Object x) { 
    Task other = (Task)x; 

    if (other.priority == this.priority) { 
     System.out.println("Each task has the same priority level."); 
     return 0; 
    } else if (other.priority > this.priority) { 
     System.out.println(other.priority + "\n" + this.priority); 
     return -1; 
    } else { 
     System.out.println(this.priority + "\n" + other.priority); 
     return 1; 
    } 
} 

これは私がクラスのプログラミング割り当てに持っているコードです。なぜ私がTask other = (Task)x;を使用しているのか、またはここで何をしているのか分かりません。残りの部分は分かります。誰かが実際にここで何をしているのかを簡単に説明すれば、私は素晴らしいだろう。ありがとうございました!なぜcompareTo(オブジェクト)のキャストを持っているのですか

+1

あなたは 'Comparable'またはいくつかの他のインターフェイスを実装していますか?その場合は、クラス宣言を追加する価値があります。 –

答えて

2

あなたはTask otherObject xキャストされている - あなたが期待されるタイプとしてxを扱う(そしてそれのフィールドを取得)できるように、キャストを必要とするので、ObjectTaskはさまざまな種類があります。

通常compareTo()にあなたが最初盲目的にそれをキャストする前にif (x instanceof Task)のようなものを持っているでしょう - そうしないと型が、その後、物事がクラッシュします異なる場合)

+1

...これは起こらないので、タスクと文字列を比較すると、何かがひどく間違っています。 – gnasher729

+0

さて、どうもありがとう! –

+0

@SarahDiri:この回答が役に立ったら、それを受け入れてください:) –

2

メソッドのシグネチャは、ためになるようObject型オブジェクトを取ります渡されたオブジェクト内の変数priorityを参照すると、変数はTaskクラス内にのみ存在するため、Taskオブジェクトへのキャストを行う必要があります。

個人的には、どのようなオブジェクトが渡されているのかわからないので、これは悪い習慣だと思います(Objectのサブクラス化はどのクラスにも渡すことができます)。 ClassCastExceptionの実行時エラーが発生します。

また、genericsを使用して、比較するオブジェクトの種類を指定することもできます。だから、むしろこれを行うよりも...

public class Task implements Comparable { 
    private int priority = 1; 

    @Override 
    public int compareTo(Object o) { 
     if (o instanceof Task) { 
      Task t = (Task) o; 
      return this.priority < t.priority; 
     } 

     return -1; 
    } 
} 

...あなたがこれを行うことができます...

public class Task implements Comparable<Task> { 
    private int priority = 1; 

    @Override 
    public int compareTo(Task t) { 
     return this.priority < t.priority; 
    } 
} 
+0

'Object x'をより具体的なものに変更できますか(この場合、' Task x' maybe)?私は授業そのものの印象の下にありました。それはそれがちょうど「どのように行われたか」でした。 –

+0

@SarahDiri 'x'を' Object'から 'Task'に"変更 "する唯一の2つの方法は、キャスト(あなたがすでに行っていること)を行うか、メソッドパラメータを変更して' Task'オブジェクトを渡すことだけですパラメータとして入力します。 Javaではジェネリックを使用することができます( 'implements Comparable'の代わりに' 'Implements Comparable ')。これを使うと、 'Task'オブジェクトのみを渡すことができます。 – Ocracoke

+0

も参照してください。[生の型とは何か、なぜそれを使わないのですか?](http://stackoverflow.com/questions/2770321/what-is) -a-raw-type-and-why-shouldnt-we-use-it) –

関連する問題