? 表示不確定的java類型。
T 表示java型別。
K V 分別代表java鍵值中的Key Value。
E 代表Element。
Object跟這些東西所代表的java型別有啥差別呢?
Object是所有類別的根類,是具體的一個類,使用的時候可能是需要型別強制轉換的,但用T ?等這些的話,在實際用之前類型就已經確定了,不需要強制轉換。
第一種是固定的一種泛型,第二種是只要是Object類別的子類別都可以,換言之,任何類別都可以,因為Object是所有類別的根基底類別
固定的泛型指類型是固定的,例如:Interge,String. 就是2a9303dff3eed1b561b75d0dce9e5a56
e18fc55ca48790d91b9db4e97e74789b 這裡?代表一個未知的類型,
但是,這個未知的類型其實是Collection的一個子類,Collection是這個通配符的上限.
舉個例子
class Test 2a9303dff3eed1b561b75d0dce9e5a56 { }
2a9303dff3eed1b561b75d0dce9e5a56其中,限定了構造此類實例的時候T是一個確定類型(具體類型),這個類型實現了Collection接口,
但是實現Collection接口的類很多很多,如果針對每一種都要寫出具體的子類別類型,那也太麻煩了,乾脆還不如用
Object通用一下。
4925b01b063da9c0d68a748519ed1936其中,?是一個未知型別,是一個通配符泛型,這個型別是實作Collection介面即可。
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