[java] Java 호환 인터페이스를 구현하는 방법은 무엇입니까?

내 추상 클래스에 비교 가능한 인터페이스를 구현하는 방법을 모르겠습니다. 다음 예제 코드를 사용하여 내 머리를 둘러싼 다.

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주문을 받게됩니다. 난 당신의 아이디어를 얻을 희망 ComparablecompareTo예제로합니다.


답변

다음을 수행해야합니다.

  • 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 () 메서드에 대한 몇 가지 주요 사실을 기억하는 것이 좋습니다

  1. CompareTo는 equals 메서드와 일치해야합니다. 예를 들어 두 객체가 equals ()를 통해 동일하면 compareTo ()는 0을 반환해야합니다. 그렇지 않으면 해당 객체가 SortedSet 또는 SortedMap에 저장되어 있으면 제대로 작동하지 않습니다.

  2. 이러한 시나리오에서 false를 반환하는 equals ()와 반대로 현재 객체가 null 객체와 비교되면 CompareTo ()는 NullPointerException을 발생시켜야합니다.

더 읽기 : http://javarevisited.blogspot.com/2011/11/how-to-override-compareto-method-in.html#ixzz4B4EMGha3


답변

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);
      }
    }

}