Ошибка компиляции Java с varargs - PullRequest
1 голос
/ 22 декабря 2011

Я создал библиотеку следующим методом:

protected static int foo(String strParam, Object... params)

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

foo("a","b")

но он не компилируется, я получаю следующее сообщение об ошибке: фактический аргумент Строка не может быть преобразована в Object [] путем преобразования вызова метода.

есть идеи?

Ответы [ 2 ]

3 голосов
/ 22 декабря 2011

У меня работает:

public class XXX extends Lib {
    public static void main(String[] args) {
        foo("a", "b");
    }
}

class Lib{
    protected static int foo(String str, Object... args) {
        return 42;
    }
}

Итак:

  • Какую версию JDK вы используете?
  • Какую исходную / классную версию Java вы используете?Все, что ниже «5», бесполезно.
  • Существуют ли другие методы, называемые foo где-то (например, перегруженные методы)?
  • Вы уверены, что не «связываете» (что бы это ни значило дляВы) против старой версии вашего кода?
0 голосов
/ 22 декабря 2011

Метод protected. Вызов происходит в классе в том же пакете или в подклассе? Если нет, абонент не может увидеть это определение foo. Я не понимаю, почему это приведет к этой конкретной ошибке, хотя. Это может свидетельствовать о том, что компилятор пытается сопоставить это с другой сигнатурой метода.

Ваш звонок действительно просто foo( ... )? Я ожидаю увидеть там имя содержащего класса, так как это статический метод - т.е. LibraryClass.foo( ... ). Если вы не определяете имя метода, то оно должно искать в локальной области класса соответствующее объявление.

...