2016-06-28 106 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<Comparable> { 

} 

是一樣的:因爲類型參數是無界的

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

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

public class Box<T> { 

} 

這是不一樣的,它會接受任何類型。所以,你可以使用一個IntegerString

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的原因是因爲向後兼容性。新的Box將具有原始類型Box<T>。這是不好的做法應該避免。

你可以閱讀更多關於RAW類型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具有可比性?

不,這是因爲Integer或原始類型new Box();具有可比性