? 정의되지 않은 Java 유형을 나타냅니다.
T는 Java 유형을 나타냅니다.
K V는 각각 Java 키 값의 키 값을 나타냅니다.
E는 Element의 약자입니다.
이런 것들로 표현되는 Object와 Java 유형의 차이점은 무엇인가요?
Object는 모든 클래스의 루트 클래스이며 특정 클래스입니다. 사용 시 유형 캐스팅이 필요할 수 있지만 T? 이를 기다리면 실제 사용하기 전에 유형이 결정되므로 강제 변환이 필요하지 않습니다.
첫 번째 유형은 제네릭의 고정 유형이고 두 번째 유형은 Object 클래스의 하위 클래스이면 모든 클래스의 기본 클래스이기 때문에 어떤 클래스라도 사용할 수 있습니다. 고정 일반 유형은 고정입니다(예: Interge, String). 32b4024199dd9b712dcc252796644ae7
ccabb5148182997eab7867be836d2f21을 확장합니까? 알 수 없는 유형을 나타냅니다.
그러나 이 알 수 없는 유형은 실제로 Collection의 하위 클래스이며 Collection은 이 와일드카드의 상한입니다.
예를 들어
class Test 48882e0bf1054c271980dd386ad2732b 그 중 T는 이러한 인스턴스를 구성할 때 특정 유형(구체 유형)입니다. 그러나 이 유형은 Collection 인터페이스를 구현하는 클래스가 많으므로 각 유형마다 특정 유형을 작성해야 합니다. , 그건 너무 번거롭습니다.
Object를 사용하여 보편적으로 만드는 것이 좋습니다.
c6681b89ac26c1396c3a4906ba175513 그 중 ?는 알 수 없는 유형이며 와일드카드 일반입니다.
The method take(Animal) in the type Test is not applicable for the arguments (Demo<Dog>) The method take(Animal) in the type Test is not applicable for the arguments (Demo<Cat>) The method take(Animal) in the type Test is not applicable for the arguments (Demo<Animal>)
public class Demo 5ad81ab85c1e7d5abd1bd5c95f1521b6{ private T ob; public T getOb() { return ob; } public void setOb(T ob) { this.ob = ob; } public Demo(T ob) { super(); this.ob = ob; } public void print(){ System.out.println("T的类型是:"+ob.getClass().getName()); } }
public <T> Class<T> resolveAlias(String string) { try { if (string == null) { return null; } // issue #748 String key = string.toLowerCase(Locale.ENGLISH); Class<T> value; if (TYPE_ALIASES.containsKey(key)) { value = (Class<T>) TYPE_ALIASES.get(key); } else { value = (Class<T>) Resources.classForName(string); } return value; } catch (ClassNotFoundException e) { throw new TypeException("Could not resolve type alias '" + string + "'. Cause: " + e, e); } }
public class Base { private static Map<String, Class<?>> map = new HashMap<>(); static { map.put("string", String.class); map.put("integer", Integer.class); } @SuppressWarnings("unchecked") public <T> Class<T> get(String str) { return (Class<T>) map.get(str); } @Test public void t() throws IllegalAccessException, InstantiationException { Base base = new Base(); Class<Integer> string = base.get("string"); System.out.println(string); } }
위 내용은 Java에서 class