배열의 인수 중에서 선택하고 특정 인수를 반환하는 메서드가 있습니다. 예를 들어, 여기에서 그 방법 :인수 전달을위한 메서드/함수를 포함하는 배열
private <T> T selectOnType(T[] selection, T defaultOp){
switch(this.type){
case Resources.TEXT:
return selection[Resources.TEXT];
case Resources.LISTEN:
return selection[Resources.LISTEN];
default:
return defaultOp;
}
}
방법 I이 방법에 대한 참조 (즉, 함수 포인터)이 상기 방법으로 그 배열을 전달할 수있게하기 위하여 전체 어레이를 구성 할 수 있는가?
나는 같은 일을 시도 :java.util.function.Function<Void, Void>[] array = {ClassA::method1, ClassA::method2};
(방법 항목 및 방법 항목은 인수를 수행하지 않고 무효 반환 곳)
을하지만 그 말 컴파일러 오류가 발생합니다 :
호환되지 않는 형식 : 잘못된 메서드 참조이지만 인수가 필요하지 않습니다.
결과 :
이유를 java.lang.Void : 실제와 형식 인수 목록의 길이가 다른
나는 같은 람다 놀아되었습니다
() -> ClassA.method1()
그러나 나는 그것을 작동시킬 수 없었다. 누구든지 내가 뭘 잘못하고이 문제에 대한 해결책을 알고 있습니까?
편집 : 내가 스택 오버플로에 this를 봐 왔지만,이 C#을위한 것이며 내가 자바를 모방하는 방법을 알아 내지 못했다.
예 :
public class Word{
private final String text;
private int listenCorrect = 0, textCorrect = 0;
public Word(final String test){
this.text = text;
}
public void incListenCorrect(){
listenCorrect++;
}
public void incTextCorrect(){
textCorrect--;
}
}
을 마지막으로 나는 Main
클래스가 :
은 이제 나는 Word
클래스가 있다고 가정 해 봅시다.
public class Main{
int type = 0;
public void action(){
Word word = new Word("Hello");
// 'Functions' is used to represent something I tried above (just for demonstration)
Function[] array = {word::incListenCorrect, word::incTextCorrect};
Function picked = selectOnType(array, word::incTextCorrect);
picked.call();
}
/*
* Resources is another class that contains the following values:
* public static final int TEXT = 0;
* public static final int LISTEN = 1;
*/
private <T> T selectOnType(T[] selection, T defaultOp){
switch(this.type){
case Resources.TEXT:
return selection[Resources.TEXT];
case Resources.LISTEN:
return selection[Resources.LISTEN];
default:
return defaultOp;
}
}
}
'method1'과'method2' 인스턴스 메소드 또는 정적 메소드입니까? – ajb
당신의 메소드는'Function'과 같지 않습니다.'Runnable' –
njzk2
@ajb 제가 포함 된 예제를보십시오; 그것들은 인스턴스 메소드입니다. –