.NET 제네릭은 CLR에서 지원하는 제네릭이기 때문에 C# 제네릭은 타입 와일드 카드를 가지고 있지 않으며 Java JVM은 제네릭을 지원하지 않고 구문 설탕 만 지원하며 컴파일러가 컴파일 할 때 객체 유형으로 변환됩니다.
타입 와일드 카드는 자바의 일반 유형의 부모 클래스를 나타냅니다.
public void test (list <bood> c) {for (int i = 0; i <c.size (); i ++) {system.out.println (c.get (i)); }}// 목록 작성 <string> 객체 목록 <string> strlist = new ArrayList <string> (); // 이전 테스트 방법 테스트 (strlist)를 달성합니다.
위의 프로그램을 컴파일하면 테스트 (strlist)에서 컴파일 오류가 발생합니다. 이는 List <string>을 List <botort>의 서브 클래스로 간주 할 수 없습니다. 현재, 당신은 타입 와일드 카드를 사용해야합니다.
위의 목록 <bood>는 List <?>로 대체 할 수 있으며 컴파일 할 수 있습니다.
public void test (list <?> c) {for (int i = 0; i <c.size (); i ++) {system.out.println (c.get (i)); }}List <string>은 List <?>의 서브 클래스로 사용할 수 있으며 List <?>는 모든 목록 유형의 부모 클래스로 사용할 수 있습니다.
List <int> 대신 부모 클래스 <string>의 부모 클래스가 되려면 어떻게해야합니까? 이 목록처럼 쓰십시오 <? String>을 확장합니다
C#에서 이것은 제약의 유형입니다
클래스 myclass <t, u> where t : 클래스 where u : struct {} 인터페이스 Imyinterface {} 클래스 사전 <tkey, tval> 여기서 tkey : icomparable, ienumerable where tval : iMyinterface {public void add (tkey key, tval val) {}}자바의 제한된 제네릭 와일드 카드의 상한 :
// t 유형은 숫자 클래스 또는 그 서브 클래스 여야하며 java.io.serializable 인터페이스 public class <t inxtends numb
위는 편집자가 가져온 Java Generic Wildcards 및 C#의 비교 및 분석의 전체 내용입니다. 모두가 wulin.com을 지원하기를 바랍니다