Почему Netbeans не видит, какой из моих методов varargs я имею в виду? - PullRequest
2 голосов
/ 16 августа 2011

Код имеет проблему в строке 18 n.fun1 ("11", 1);в NetBeans, но не в других IDE, эта проблема только в NetBeans 7.0.1, в которой IDE показывает:

ссылка на fun1 неоднозначна, оба метода fun1 (java.lang.String, java.lang.Object...) в Тесте и методе fun1 (java.lang.String, int, java.lang.Object ...) в Тестовом совпадении

Соответствующий код находится здесь:

interface Test {
    public void fun1(String str, Object... objs);
    public void fun1(String str, int i, Object... objs);
}
public class NewClass implements Test {
    public void fun1(String str, Object... objs) {
        System.out.println("111111111111111111111");
    }
    public void fun1(String str, int i, Object... objs) {
        System.out.println("2222222222222");
    }
    public static void main(String[] args) {
        Test n = new NewClass();
        n.fun1("11", 1);
    }
}

Ответы [ 4 ]

2 голосов
/ 16 августа 2011

В вашем интерфейсе нет такого метода fun1("11", 1); // fun1(String, int), попробуйте это:

n.fun1("11", new Integer(1));
1 голос
/ 29 мая 2012

Я столкнулся с той же проблемой. Я обнаружил, что об этом уже сообщалось команде Netbeans: https://netbeans.org/bugzilla/show_bug.cgi?id=200024

Ваш код должен компилироваться с JDK6, но не с JDK7. По словам ребят из Netbeans, спецификация Java не позволяет использовать эти два метода в одном классе. По их мнению, тот факт, что JDK6 не жалуется на это, следует рассматривать как ошибку, которая была исправлена ​​в JDK7

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

В моем случае мы переименовали один из двух методов, чтобы он соответствовал JDK7.

1 голос
/ 16 августа 2011

Обновлено

Перечитав ваш вопрос, я вижу реальную проблему здесь.В вашем интерфейсе есть два fun1 метода.

public void fun1(String str, Object... objs) // first

и

public void fun1(String str, int i, Object... objs); // second

Проблема в том, что вы вызываете метод вашего класса:

n.fun1("11", 1);

Среда IDE не смогла решить, хотите ли вы вызвать первый метод или ваш второй.

Потому что он может быть первым с автоматическим переносом параметра 1 в объект Integer.Или это может быть второе, с параметром objs в качестве пустого массива.

Невозможно исправить это без изменения интерфейса.Мой Java-компилятор (1.6.0_26) может скомпилировать его без каких-либо проблем, и он вызывает ваш второй метод.

Но, как IDE говорит, что это неоднозначно , и это правильно, это определениесбивает с толку и его следует избегать.

0 голосов
/ 16 августа 2011

Какой JDK использует ваш netbeans?Может ли это быть старым (действительно старым)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...