Java Generic 메소드를 정적으로 만드는 방법은 무엇입니까?
다음은 단일 항목을 배열에 추가하기 위해 Java 일반 클래스를 작성하는 방법에 대한 스 니펫입니다. appendToArray를 정적 메서드로 만들려면 어떻게해야합니까? 메소드 서명에 정적을 추가하면 컴파일 오류가 발생합니다.
public class ArrayUtils<E> {
public E[] appendToArray(E[] array, E item) {
E[] result = (E[])new Object[array.length+1];
result[array.length] = item;
return result;
}
}
당신이 할 수있는 유일한 일은 서명을
public static <E> E[] appendToArray(E[] array, E item)
중요한 세부 사항 :
반환 값 앞에 오는 제네릭 식은 항상 새로운 제네릭 형식 변수를 도입 (선언)합니다.
또한 형식 ( ArrayUtils
)과 정적 메서드 ( appendToArray
) 사이의 형식 변수는 서로 간섭하지 않습니다.
그래서 이것이 의미하는 바는 : 내 대답 에서 메소드가 아닌 경우 from을 <E>
숨길 것 입니다. 그리고 from 과 는 아무런 관련이 없습니다 .E
ArrayUtils<E>
static
<E>
E
ArrayUtils<E>
이 사실을 더 잘 반영하기 위해 더 정확한 답은 다음과 같습니다.
public static <I> I[] appendToArray(I[] array, I item)
public static <E> E[] appendToArray(E[] array, E item) { ...
를 참고하십시오 <E>
.
정적 제네릭 메서드 public static <E>
에는 클래스의 제네릭 선언 ( public class ArrayUtils<E>
)과 별개로 고유 한 제네릭 선언 ( )이 필요합니다 .
컴파일러가 정적 제네릭 메서드를 호출하는 데있어 모호한 유형에 대해 불평하는 경우 (여러분의 경우는 아니지만 일반적으로 말하면) 특정 유형 ( _class_.<_generictypeparams_>_methodname_
)을 사용하여 정적 제네릭 메서드를 명시 적으로 호출하는 방법은 다음과 같습니다.
String[] newStrings = ArrayUtils.<String>appendToArray(strings, "another string");
예를 들어 제네릭 형식은 메서드 인수와 관련이 없기 때문에 컴파일러가 제네릭 형식을 확인할 수없는 경우에만 발생합니다.
제네릭 클래스가 아닌 제네릭 메서드가 있음을 나타내려면 형식 매개 변수를 메서드 수준으로 이동해야합니다.
public class ArrayUtils {
public static <T> E[] appendToArray(E[] array, E item) {
E[] result = (E[])new Object[array.length+1];
result[array.length] = item;
return result;
}
}
참고 URL : https://stackoverflow.com/questions/4409100/how-to-make-a-java-generic-method-static
'development' 카테고리의 다른 글
두 개의 Git 커밋간에 변경된 모든 파일 목록을 얻는 방법은 무엇입니까? (0) | 2020.06.10 |
---|---|
Visual Studio Code 설정을 내보내는 방법? (0) | 2020.06.10 |
define_method에 인수를 어떻게 전달합니까? (0) | 2020.06.10 |
원격 호스트에서 하나의 포트 상태 확인 (0) | 2020.06.10 |
왜 콘솔 창이 닫히면 즉시 출력이 표시됩니까? (0) | 2020.06.10 |