动态2D数组可以实现Java.Collection.size()方法吗?

Wir*_*s77 5 java collections int type-conversion long-integer

好的,所以我在Java中创建了一个实现java.util.Collection接口的动态2D数组.我让我的数组实现它,因为我希望它具有与普通相同的功能Collection.但是,我无法实现该size()方法,因为在接口中它返回一个整数,并且2D矩阵可能会溢出整数类型.

这是我正在尝试制作的课程片段:

public abstract class AbstractMatrix<E> implements Collection<E>{
     @Override
     public long size() {
         return columns * rows;
     }
}
Run Code Online (Sandbox Code Playgroud)

现在,这将无法工作,因为"返回类型与Collection<E>.size()" 不兼容",如果我将类型更改为int,则列*行可能会溢出.

我知道我不能覆盖像这样的大小方法,但是有什么方法可以确保方法在仍然实现Collection接口的同时返回正确的大小?

是的,我知道这是不切实际的,可能永远不会成为一个问题,但我很想知道是否有一个很好的解决方案.

ass*_*ias 2

尽管您的实现有问题,但javadoc中定义了size契约:Collection#size

返回此集合中的元素数量。如果此集合包含多个 Integer.MAX_VALUE 元素,则返回 Integer.MAX_VALUE。

因此,您可以将大小计算为 a ,如果大于则long返回。Integer.MAX_VALUEInteger.MAX_VALUE

或者,您可以模仿它的实现方式,LinkedList#add例如,其中size简单地递增并允许溢出。