2016-06-28 77 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();具有可比性