Я пытаюсь сделать ссылку метода на метод, который имеет общий параметр, указанный в объявлении класса. Так у меня есть:Ссылка на метод Java с методом с общим параметром
public interface IExecutable<P extends IParameter> {
void execute(P parameter);
}
public class Parameter implements IParameter {
public void childSpecific() {
...
}
}
public class TestClass {
...
//somewhere in the code
public void foo(Parameter parameter) {
parameter.childSpecific();
}
public void test() {
IExecutable<?> executable = this::foo; //compilation error
// The type TestClass does not define inner(IParameter) that is applicable here
executable.execute(new Parameter()); //compilation error as well
// The method execute(capture#4-of ?) in the type IExecutable<capture#4-of ?> is not applicable for the arguments (Parameter)
}
...
}
Это специфичны, что я не знаю, конкретный общий тип исполняемого файла здесь. Использование
IExecutable<Parameter> = ...
решает проблему немедленно, но это невозможно для случая.
Очевидно, что я делаю что-то неправильно. Но как заставить его работать?
Thx.
ли '' IExecutable работы? Кроме того, я думаю, вы получаете множество предупреждений о недостающих общих типах. Попытайтесь исправить это. –
Thilo
Если у вас есть ссылка типа 'IExecutable >', вы не сможете вызывать 'execute' с чем-то другим, кроме литерала' null' в качестве аргумента. Поэтому я не понимаю, что вы пытаетесь сделать. –
Существует важное различие между java7 и java8. В java7 это сработает. В Java8 это, очевидно, нет. –