? Represents an undefined java type.
#T represents the java type.
K V respectively represent the Key Value in the java key value.
E stands for Element.
What is the difference between Object and the java types represented by these things?
Object is the root class of all classes and is a specific class. Type casting may be required when using it, but using T? If you wait for these, the type has been determined before actual use, and no forced conversion is required.
The first is a fixed generic type, and the second is as long as it is a subclass of the Object class. In other words, any class can be used, because Object is the root class of all classes.
Fixed The generic type refers to a fixed type, such as: Interge, String. Is it
extends Collection> here? Represents an unknown type,
However, this unknown type is actually a subclass of Collection, and Collection is the upper limit of this wildcard.
For example
class Test
but there are many classes that implement the Collection interface. , if you have to write a specific subclass type for each type, it would be too troublesome. It is better to use
Object to make it universal.
extends Collection> Among them, ? is an unknown type and a wildcard generic. This type only needs to implement the Collection interface.
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 <T extends Animal>{ 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); } }
The above is the detailed content of Detailed sample code explanation of the difference between class