首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类似的Java实例

类似的Java实例
EN

Stack Overflow用户
提问于 2016-06-28 10:16:23
回答 1查看 604关注 0票数 1

为什么创建new Box();new Box<Integer>();是合法的?是因为Box是可比较的吗?

代码语言:javascript
运行
复制
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));
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 10:20:12

您已经用泛型类型参数声明了该类。这与实现可比较的接口不同:

代码语言:javascript
运行
复制
public class Box<Comparable> {

}

与以下相同:

代码语言:javascript
运行
复制
public class Box<T> {

}

这与以下情况不同:

代码语言:javascript
运行
复制
public class Box<T> implements Comparable<T> {

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

因为类型参数是无界的,所以它将接受任何类型。所以您可以使用IntegerString

代码语言:javascript
运行
复制
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>。这是不好的做法,应该避免。

您可以阅读更多关于原始类型这里的信息。

如果要强制执行类型参数实现可比较,则可以:

代码语言:javascript
运行
复制
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>(); 
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38073420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档