У меня есть следующие классы
интерфейс 1
package test;
public interface TODO {
boolean test();
}
интерфейс 2
package test;
@FunctionalInterface
public interface FuncN {
State zip(State ...states);
}
класс 1
package test;
public class Test {
public static Test define(FuncN zipperFunc,TODO... tasks) {
return null;
}
public static Test define(TODO... tasks) {
return null;
}
}
класс 2
пакетный тест;
public class State {
public static State mergeStates(State ...states) {
return null;
}
}
основной класс
package test;
public class Main {
public static void main(String[] args) {
Test.define(State::mergeStates,()->true);
}
}
Класс main не компилируется, выдает ошибку
ссылка на определение неоднозначна
Test.define (Государство :: mergeStates, () -> истина);
^
определение метода (FuncN, TODO ...) в тесте и определение метода (TODO ...) в тестовом совпадении
Класс ниже компилируется:
package test;
public class Main {
public static void main(String[] args) {
Test.define(states->State.mergeStates(states),()->true);
}
}
Однако я не вижу никакой двусмысленности. Сигнатуры FuncN и TODO совершенно разные, я не думаю, что компилятор должен принимать их друг за друга.
Поправь меня, если я ошибаюсь.
P.S. Ошибка не воспроизводится с помощью eclipse, поэтому я бы порекомендовал создать тест папки, создав в ней все java-файлы и запустить javac test / Main.java