したがって、同じメソッドの 2 つのバージョンがあります。
バージョン 1:
public static <T> int countGreaterThan(T[] anArray, T elem)
{
int count = 0;
for (T e : anArray)
{
if (e > elem)
count++;
}
return count;
}
バージョン 2:
public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem)
{
int count = 0;
for (T e : anArray)
{
if (e.compareTo(elem) > 0)
count++;
}
return count;
}
> 演算子はプリミティブを比較する場合にのみ使用できるため、 Eclipse はバージョン 1について文句を言います。これは私には理にかなっています。
したがって、この問題を解決するには、Comparable インターフェースによって境界付けられた型パラメーターを使用するようにインターネットから指示されます。ここから、何が起こっているのか分からなくなり始めます...
インターフェイスに関する私の基本的な理解から、インターフェイスを実装するクラスは、インターフェイスで宣言された各メソッドのメソッド本体を提供する必要があります。
では、なぜバージョン 2はこのように見える必要がないのでしょうか?
public int compareTo(T o)
{
//stuff for method body
}
public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem)
{
int count = 0;
for (T e : anArray)
{
if (e.compareTo(elem) > 0)
count++;
}
return count;
}
^これは正しい構文ではないと思いますが、この状況で Comparable インターフェースのメソッドのメソッド本体を記述する必要がない理由についての質問を説明するためにこれを行いました。
素人の言葉で説明を続けるようにしてください。私はこのことを独学で学んできたので、簡単な説明は、トピックをさらに調査するときに、トピックのより技術的な側面を理解するのに役立ちます.
混乱してすみません、はっきりさせてください。
Comparable インターフェイスのコードは次のとおりです。
public interface Comparable<T> {
public int compareTo(T o);
}
インターフェイスであるため、compareTo() のメソッド本体はありません。countGreaterThan() メソッドでインターフェイスを使用できるように、compareTO() の本体を手動で記述する必要がないのはなぜですか?
インターフェイスが Java Collections Framework の一部であるためですか (それが理由である場合は、それがどのように機能するかを説明してください)
独自のインターフェイスを作成する別の状況を次に示します。
public interface Dance { //an interface
public void boogie(int count);
}
そのインターフェイスをさまざまなクラスに実装するには、ダンス インターフェイスのメソッドのメソッド本体をそれらのクラスに記述する必要があります。
public class theMoonwalk implements Dance {
public void boogie(int count) {
System.out.println("Slide " + count + " times!");
}
public void mJ() {
System.out.println("Michael Jackson did this dance!");
}
public class theHustle implements Dance {
public void boogie(int steps) {
System.out.println("Step " + steps + " times!");
}
}
public class theJitterBug implements Dance {
public void boogie(int twists) {
System.out.println("Twist " + twists + " times!");
}
}
compareTo() のメソッド本体を作成する必要がないのはなぜですか (メソッド本体が compareTo() の Comparable インターフェイスに含まれていないため)。