2016-06-28 2 views
1

new Box();new Box<Integer>();을 만드는 것이 합법적 인 이유는 무엇입니까? Box이 (가) 비교할 수 있습니까?Java 인스턴스를 비교할 때

public class Box<Comparable> { 
    private boolean compareTo(Box b) { 
    return (this.y > b.y); 
    } 

    double x=0; 
    double y=0; 

    public static void main (String[] args) { 
    Box a = new Box(); 
    Box b = new Box<Integer>(); 
    System.out.println(a.compareTo(b)); 
    } 
} 
+0

달성하고자하는 것에 대한 자세한 정보를 제공해주십시오. 현재 귀하의 질문에 대해 여러 가지 설명이있을 수 있습니다. 읽으십시오 : http://stackoverflow.com/help/how-to-ask –

+0

아래 달성하기 위해 노력하는 것 : class Box { –

답변

5

클래스를 제네릭 형식 매개 변수로 선언했습니다. 형식 매개 변수가 바운드 형식이기 때문에

public class Box<T> implements Comparable<T> { 

    @Override 
    public int compareTo(final T o) { 
     return 0; 
    } 
} 

: 같은

public class Box<T> { 

} 

되지 않은 :와 동일

public class Box<Comparable> { 

} 

:이 Comparable 인터페이스를 구현하는 동일하지 않습니다 모든 유형을 허용합니다.

public class Box<T> { 

    public static void main(String[] args) { 
     Box a = new Box(); 
     Box b = new Box<>(); 
     Box c = new Box<Integer>(); 
     Box d = new Box<String>(); 
    } 
} 

당신이 유형을 지정하지 않고 새로운 Box를 만들 수 있습니다 이유 때문에 이전 버전과의 호환성이다 : 그래서 당신은 Integer 또는 String가 사용할 수 있습니다. 새로운 Box은 원시 타입이 Box<T>입니다. 나쁜 사례이므로 피해야합니다.

당신은 형식 매개 변수가 Comparable를 구현하는 시행하고 싶었다면 원시 유형 here

에 대한 자세한 내용을보실 수 있습니다, 당신은 할 수 있습니다 :

import java.awt.*; 

public class Box<T extends Comparable<T>> { 

    public static void main(String[] args) { 
     Box a = new Box(); 
     Box b = new Box<>(); 
     Box c = new Box<Integer>(); 
     Box d = new Box<String>(); 

     // This one will not work as Rectangle does not implement Comparable! 
     Box e = new Box<Rectangle>(); 
    } 
} 
1

짧은 답변 :

new Box();new Box<Integer>();을 만드는 것이 합법적 인 이유는 무엇입니까? Box이 (가) 비교할 수 있습니까? new Box();에서 Integer 또는 원시 유형 비교하기 때문에

아니, 그것은이다.

관련 문제