Java 제네릭에서 '&'와 ','의 차이점은 무엇입니까?


110

제네릭에 대한 Java 공식 자습서를 읽는 동안 다음 T과 같이 'and'연산자 ( &) 를 사용하여 클래스 및 / 또는 더 많은 인터페이스를 확장하기 위해 유형 인수 (이 경우 )를 제한 할 수 있음을 발견했습니다 .

<T extends MyClass & Serializable>

나는 대체 &,(실수로 여전히 작은 경고와 함께 작동).

제 질문은이 둘 사이에 차이점이 있습니까?

<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma

그리고 예제 방법 :

static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
    ArrayList<T> arr = new ArrayList<T>();

    for (T o : a) {
        arr.add(o); // Correct
    }
    return arr;
}

5
@Doorknob OP가 키보드와 사용중인 것과 동일한 키보드를 사용하고 있다고 가정합니다.
emory

3
@emory 나는 그것이 방향이 틀렸다고 생각한다. 오류는 그의 손가락이 아니라 그의 뇌에 있었다. 마치 Java 소스 파일에서 'import'대신 'include'를 사용하려고 시도한 것과 유사합니다. 뇌가 잘못된 것을 입력하라고 말했기 때문에 '포함'을 잘못 입력했는데, 이는 여러 가지 이유로 가능합니다.
Nick Pickering

2
@Nicholas Pickering이 맞습니다! 저에게는 키보드 때문이 아니라 뇌 때문이었습니다. 클래스가 구현하는 인터페이스를 작성할 때 쉼표로 구분합니다.
Alin Ciocan 2013-08-23

답변:


169
<T extends MyClass & Serializable>

이것은 단일 유형 매개 변수 T가 확장 MyClass되어야하고이어야 함을 주장 합니다 Serializable.

<T extends MyClass , Serializable>

이것은 두 개의 유형 매개 변수를 선언합니다 . 하나는 호출 T(확장해야 함 MyClass)과 호출 Serializable(숨기기 java.io.Serializable)입니다. 이것은 아마도 경고의 내용 일 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.