Перегруженный конструктор Java параметр силы int - PullRequest
2 голосов
/ 07 ноября 2011

У меня есть два перегруженных метода конструктора в классе (из пакета 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);

Как заставить первый параметр быть целым, а не длинным?Я знаю наоборот, просто приведу к (long), но мне нужно, чтобы он был int.

Ответы [ 3 ]

2 голосов
/ 07 ноября 2011

Вызов функции со списком long или int, за которым следует список long, просто вызывает проблемы, тем более что java автоматически преобразует int в long для вас.(Другими словами, то, что вы передали в этот конструктор, будет работать для любого из них.)

Если вы не можете установить этот шаблон параметров (который я настоятельно рекомендую вам изменить), вам придется принятьв типе Integer (в отличие от типа int) и явно передайте объект Integer в функцию.

Другими словами, попробуйте это:

DefaultSparseIntMatrix(Long... size)

и

DefaultSparseIntMatrix(Integer maximumNumberOfEntries, Long... size)
2 голосов
/ 07 ноября 2011

попробуй

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

vararg является синтаксическим сахаром для массива, а также позволяет напрямую передавать массив

1 голос
/ 07 ноября 2011

Я бы использовал шаблон построителя и использовал что-то вроде этого, такое же простое в использовании, как конструктор, и более понятное по своему назначению:

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

Метод сборки вызывает закрытый конструктор DefaultSparseIntMatrix с самим построителем в качестве уникального аргумента, и конструктор получает данные от построителя.

...