首頁 > Java > java教程 > java中的class和 class區別範例程式碼詳解

java中的class和 class區別範例程式碼詳解

伊谢尔伦
發布: 2017-07-19 11:38:35
原創
4050 人瀏覽過

? 表示不確定的java類型。 

T  表示java型別。 

K V 分別代表java鍵值中的Key Value。 

E 代表Element。

Object跟這些東西所代表的java型別有啥差別呢?
Object是所有類別的根類,是具體的一個類,使用的時候可能是需要型別強制轉換的,但用T ?等這些的話,在實際用之前類型就已經確定了,不需要強制轉換。

第一種是固定的一種泛型,第二種是只要是Object類別的子類別都可以,換言之,任何類別都可以,因為Object是所有類別的根基底類別
固定的泛型指類型是固定的,例如:Interge,String. 就是

<? extends Collection> 這裡?代表一個未知的類型,
但是,這個未知的類型其實是Collection的一個子類,Collection是這個通配符的上限.
舉個例子
class Test { }

其中,限定了構造此類實例的時候T是一個確定類型(具體類型),這個類型實現了Collection接口,
但是實現Collection接口的類很多很多,如果針對每一種都要寫出具體的子類別類型,那也太麻煩了,乾脆還不如用
Object通用一下。
其中,?是一個未知型別,是一個通配符泛型,這個型別是實作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 <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 &#39;" + string + "&#39;.  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和 class區別範例程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板