私はどのようにして同等のインターフェースを私の抽象クラスに実装するのかわからない。私は試してみて、頭の中で頭を動かすために使用している次のコード例を持っています。
public class Animal{
public String name;
public int yearDiscovered;
public String population;
public Animal(String name, int yearDiscovered, String population){
this.name = name;
this.yearDiscovered = yearDiscovered;
this.population = population; }
public String toString(){
String s = "Animal name: "+ name+"\nYear Discovered: "+yearDiscovered+"\nPopulation: "+population;
return s;
}
}
Animal型のオブジェクトを作成するテストクラスがありますが、このクラス内に比較可能なインターフェイスがあり、古い発見が低いよりも上位になるようにします。私はこれについてどのように取り組むのかわからないけど。
Animal implements Comparable<Animal>
、つまりpublic class Animal implements Comparable<Animal>
を定義するだけです。そしてcompareTo(Animal other)
メソッドを好きなように実装しなければなりません。
@Override
public int compareTo(Animal other) {
return Integer.compare(this.year_discovered, other.year_discovered);
}
このcompareTo
の実装を使用すると、year_discovered
が高い動物ほど高い順序で並べられます。この例でComparable
とcompareTo
のアイデアを得られることを願っています。
必要がある:
implements Comparable<Animal>
を追加してください。そしてint compareTo( Animal a )
メソッドを実装します。このような:
public class Animal implements Comparable<Animal>{
public String name;
public int year_discovered;
public String population;
public Animal(String name, int year_discovered, String population){
this.name = name;
this.year_discovered = year_discovered;
this.population = population;
}
public String toString(){
String s = "Animal name: "+ name+"\nYear Discovered: "+year_discovered+"\nPopulation: "+population;
return s;
}
@Override
public int compareTo( final Animal o) {
return Integer.compare(this.year_discovered, o.year_discovered);
}
}
あなたがその中にいる間、私はcompareTo()メソッドについてのいくつかの重要な事実を覚えておくことを勧めます
CompareToはequalsメソッドと一致している必要があります。 2つのオブジェクトがequals()で等しい場合、compareTo()はそれ以外の場合はゼロを返す必要があります。そうでない場合、それらのオブジェクトがSortedSetまたはSortedMapに格納されていると、正しく動作しません。
このようなシナリオでfalseを返すequals()とは対照的に、現在のオブジェクトがnullオブジェクトと比較される場合、CompareTo()はNullPointerExceptionをスローする必要があります。
続きを読む: http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha
あなたのクラスにComparable<Animal>
インターフェースを実装し、あなたのクラスにint compareTo(Animal other)
メソッドの実装を提供します。 この記事を参照
あなたはインターフェースを実装してcompareTo()メソッドを定義する必要があるでしょう。よいチュートリアルは - チュートリアルポイントリンク または MyKongLink に行ってください。
Integer.compare
を必要とするAPI Version 19
メソッドのソースコードからの可能な代替は以下のとおりです。
public int compareTo(Animal other) { return Integer.valueOf(this.year_discovered).compareTo(other.year_discovered); }
この代替方法ではありませんAPI version 19
を使う必要があります。
EmpクラスはComaparableインターフェースを実装する必要があるので、compateToメソッドをオーバーライドする必要があります。
import Java.util.ArrayList;
import Java.util.Collections;
class Emp implements Comparable< Emp >{
int empid;
String name;
Emp(int empid,String name){
this.empid = empid;
this.name = name;
}
@Override
public String toString(){
return empid+" "+name;
}
@Override
public int compareTo(Emp o) {
if(this.empid==o.empid){
return 0;
}
else if(this.empid < o.empid){
return 1;
}
else{
return -1;
}
}
}
public class JavaApplication1 {
public static void main(String[] args) {
ArrayList<Emp> a= new ArrayList<Emp>();
a.add(new Emp(10,"Mahadev"));
a.add(new Emp(50,"Ashish"));
a.add(new Emp(40,"Amit"));
Collections.sort(a);
for(Emp id:a){
System.out.println(id);
}
}
}
これは、Javaと同等のインターフェースを実装するためのコードです。
// adding implements comparable to class declaration
public class Animal implements Comparable<Animal>
{
public String name;
public int yearDiscovered;
public String population;
public Animal(String name, int yearDiscovered, String population)
{
this.name = name;
this.yearDiscovered = yearDiscovered;
this.population = population;
}
public String toString()
{
String s = "Animal name : " + name + "\nYear Discovered : " + yearDiscovered + "\nPopulation: " + population;
return s;
}
@Override
public int compareTo(Animal other) // compareTo method performs the comparisons
{
return Integer.compare(this.year_discovered, other.year_discovered);
}
}