我在类中有两个重载的构造函数方法(来自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。
答案 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的私有构造函数,构建器本身作为唯一参数,构造函数从构建器中获取数据。