Java의 범용법 요약

2148 단어 Java범용
본고는 자바에서의 범용법을 실례로 총결하였다.여러분에게 참고할 수 있도록 나누어 드리겠습니다.구체적으로 다음과 같습니다.
1 기본 사용

public interface List<E> {
 void add(E);
 Iterator<E> iterator();
}

2 범형과 자류
Child는 Parent의 하위 클래스입니다. List는 List의 하위 클래스가 아닙니다.
따라서 Listlist=new ArrayList()는 잘못되었습니다.
만약 위쪽이 정확하다면:

List<String> ls = new ArrayList<String>(); //1
List<Object> lo = ls; //2
lo.add(new Object()); // 3
String s = ls.get(0); // 4, object string 。
3 wildcards
2 때문에 아래의 실현은 집합을 통일하는 출력에 사용하면 안 된다

void printCollection(Collection<Object> c) {
 for (Object o: c) {
 // do something
 }
}
따라서 와일드카드가 필요합니까?:

void printCollection(Collection<?> c) {
 for (Object o: c) { // 1
 // do something
 }
} // ok
여기?표현 유형은 알 수 없지만 모든 객체가 Object이므로 위의 1은 올바르다.그러나 다음 예는 잘못된 것입니다.

void add(Collection<? extends MyClass> c) {
 c.add(new MyClass()); // wrong
} // ok

원인도 명확한데,?extends MyClass는 유형이 MyClass의 하위 클래스라는 것을 설명하지만 구체적인 유형은 모른다
4. 범용 방법
위의 예는 다음과 같습니다.

<T> add(Collection<T> c, T t) {
 c.add(t);
}

컴파일러는 의미를 확보하는 전제에서 유형의 변환 작업을 도와준다.
5. 범용 실행 시 대비

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); // true

범용 클래스가 실행될 때와 같기 때문이다.
6 범용 그룹 (유형이 안전하지 않을 수 있음)
List[] lsa = new ArrayList[10]; // error
가능하다면 유형이 안전하지 않을 수도 있습니다.예:

Object o = lsa;
Object []oa = (Object[])o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[1] = li;
String s = lsa[1].get(0); // runtime error

본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기