Java重载构造函数强制int参数

时间:2011-11-06 22:12:07

标签: java integer overloading long-integer ujmp

我在类中有两个重载的构造函数方法(来自UJMP包):

DefaultSparseIntMatrix(long... size)

DefaultSparseIntMatrix(int maximumNumberOfEntries, long... size)

我想用int调用第二个,但是编译器给出了这个错误:

reference to DefaultSparseIntMatrix is ambiguous

这就是我现在所说的:

Matrix m = new DefaultSparseIntMatrix((int) (vertices.length*50), (long) vertices.length, (long) vertices.length);

如何强制第一个参数为int,而不是long? 我知道反过来,只是转换为(long),但我需要它是一个int。

3 个答案:

答案 0 :(得分:2)

尝试

Matrix m = new DefaultSparseIntMatrix((int) (vertices.length*50), new long[]{vertices.length,vertices.length});

vararg是数组的语法糖,它也允许直接传入数组

答案 1 :(得分:2)

调用一个包含long列表的函数,或者一个int后跟一个long列表,这只是一个问题,特别是因为java会自动将一个int转换为long。 (换句话说,你传递给那个构造函数的东西对任何一个都有效。)

如果你已经设置了这个参数模式(我强烈建议你改变),你将不得不接受Integer类型(而不是int类型),并显式地将Integer对象传入函数。

换句话说,试试这个:

DefaultSparseIntMatrix(Long... size)

DefaultSparseIntMatrix(Integer maximumNumberOfEntries, Long... size)

答案 2 :(得分:1)

我会使用构建器模式并使用类似这样的东西,它很容易用作构造函数并且更清晰:

Matrix m = new DefaultSparseIntMatrixBuilder().withMaxNumberOfEntries(vertices.length * 50)
                                              .withSize(vertices.length, vertices.length)
                                              .build();

构建方法调用DefaultSparseIntMatrix的私有构造函数,构建器本身作为唯一参数,构造函数从构建器中获取数据。