2014-09-10 59 views

回答

8

一個典型的例子是,通過反射創建類的實例時:

//avoiding exception handling, leave that up to you 
static <T> T make(Class<T> clazz) { 
    return clazz.newInstance(); 
} 
//... 
A a = make(A.class); 

此外,當您要確保在編譯時,有些引用屬於一個特定的類,如Collections#checkedXxx使用。

1

讓我們考慮,我們有一些造物主

abstract class Creator<T> 
    { 
    Creator(Class<T> c) 
    { 
     this.c = c; 
    } 

    T addMainElement(Object obj) 
    { 
     return c.cast(this); 
    } 

    private Class<T> c; 
    } 

而一些包裝

class CreatorWrapper extends Creator<CreatorWrapper> 
    { 
     CreatorWrapper() { 
     super(CreatorWrapper.class); 
     } 

     CreatorWrapper addMinorElement(Object obj) 
     { 
     return this; 
     } 
    } 

這樣那樣的主要優點是,我們可以用我們的創作者一樣,

CreatorWrapper creator = new CreatorWrapper() 
     .addMainElement(someObj1) 
     .addMinorElement(someObj2); 

如果基類沒有關於子類的知識,我們將無法做到這一點。
而且我們不會打擾「從main.Creator未經檢查的強制轉換爲T」的警告,我們將如果我們投一樣,

return (T)this; 

Java Class.cast() vs. cast operator

1

例如,如果你想將許多字段的值封裝到實體中,如Hibernate框架的方法「session.get(Class entityClass,String primaryKey)」。您需要定義entityClass,以便Hibernate知道如何將查詢結果封裝到實體中。 一個簡單的例子使用類作爲參數:

public T getInstance(Class<T extends Serializable> clazz) throws Exception 
    { 
      // the ParameterType "T extend Serializable" means that: 
      // the argument clazz must be a sub of the Interface Serializable 
      if(null != clazz) 
      { 
       return clazz.newInstacne(); 
      } 

     return null; 
    } 
0

傻例如:

public class PassClassExample { 

    public static class ClassValidator { 
     private Class theClass; 
     public ClassValidator(Class theClass) { 
      this.theClass = theClass; 
     } 

     public boolean instanceOf(Class someClass) { 
      return theClass == someClass; 
     } 
    } 

    public static void main (String [] args) { 
     ClassValidator personValidator = new ClassValidator(Person.class); 

     Person you = new Person(); 
     Animal me = new Animal(); 

     System.out.println(personValidator.instanceOf(you.getClass())); 
     System.out.println(personValidator.instanceOf(me.getClass())); 

    } 

    public static class Person { 

    } 

    public static class Animal { 

    } 
} 

會打印出

true 
false 

說明你是一個人,我是一個動物:)

相關問題