泛型类的定义:类型边界的问题

时间:2018-01-08 00:45:14

标签: java class

我想做一些非常简单的事情:一个Rectangle类,其坐标是int或double。但是,在以下代码中

public class Rect<T extends Number>
{
    T X1;
    T Y1;
    T X2;
    T Y2;

    public Rect(T x1, T y1, T x2, T y2)
    {
        X1 = x1;
        Y1 = y1;
        X2 = x2;
        Y2 = y2;
    }

    public Rect()
    {
        X1 = 0;
    }
}

我收到错误消息&#34;不兼容的类型:int无法转换为T&#34;。我选择java.lang.Number作为基类类型,因为Integer和Double在那里。我写#34; X1 = new T(0)&#34;时也会出错。任何人都可以告诉我这里有什么问题吗?最后,我想与班级成员一起工作(补充等)。

2 个答案:

答案 0 :(得分:2)

在我看来,你应该假设所有坐标都是Double。最简单的做法。 另一种解决方案是删除您尝试将值设置为零的构造函数。只需使用传递所有值的构造函数。

答案 1 :(得分:0)

  • 首先,泛型不适用于原语(尝试传递int 作为java.util.ArrayList的类型参数,看看会发生什么)。
  • 其次,您无法执行new T(0),因为如果在运行时没有绑定,则T被推断为其绑定或Object。现在,new T(0)执行的操作是,在运行时,T被推断为NumberNumber没有arguments (阅读here

如果您需要,可以X1 = new Integer(0)或更好X1 = new Double(0.0)执行某些操作。

相关问题