2012-09-22 27 views

cevap

32

var - tip argüman bilgisini koruyacaktır. Örneğin

, bir ArrayList<String> nesne eleman tipi nedeniyle silinmemesi için, String olduğunu, üst sınıf bilgiler kaybolur değil olduğunu bilmez halde, bu yüzden new ArrayList<String>{} onun üst sınıf ArrayList<String>, sadece ArrayList olduğunu bilir. TypeToken, bu tür bir yapılandırılmış genel türü temsil eden tekniği kullanır.

+3

Bir süredir 'TypeToken' kullanıyorum, ancak incelik ve zekiliği asla takdir etmedim. Bu oldukça harika – Ray

18

Guava'nın kullanabileceği bir kullanım var. Bildiğiniz gibi, türler derlendikten sonra kaybolur, ancak tür sınıf düzeyinde spefied ise, derleme sonrasında kaybolmaz ve yansıma ile çıkarılabilir. Kodu bir dakika içinde çıkarmak için koyacağım. kod herhangi bir kullanım ise


Düzenleme Bilmiyorum, ama burada bu amacı TypeTokenüst sınıf örneğinin bulmak için izin vermektir

public class Reflect { 

    public static void main(String[] args) { 
     Super<String> aStringSuper = new Super<String>() {}; 
     aStringSuper.method(); 

     Super<List<Integer>> aListSuper = new Super<List<Integer>>() {}; 
     aListSuper.method(); 
    } 

} 

class Super<T> { 

    public void method() { 
     Type genericSuperclass = this.getClass().getGenericSuperclass(); 
     ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; 
     for(Type type : parameterizedType.getActualTypeArguments()) { 
      System.out.println(type); 
     } 
    } 
} 
+0

Bu, TypeToken'in gerçek kullanımıdır. –

İlgili konular