2015-11-05 63 views
0
private Schema<Message<K, V>> messageSchema = RuntimeSchema.getSchema(Message.class); 

正如你所看到的,我使用了一個需要我的消息類型的類的函數。但是,我不能這樣做,因爲它需要多個參數。當有多個參數時獲取.class

以前,我做了使用嘗試:

private final Class<K, V> type; 

public MessageClass(Class<K, V> type) { 
    this.type = type; 
} 

public Class<K, V> getMyType() { 
    return this.type; 
} 

但是它倒扁它的臉因服用類只有一個參數。

+0

如果這是一件事情,它會是'類>'。 – zapl

回答

1

當設計採取類定義的API,人們通常有兩種選擇:

  1. 接受裸類和不支持的參數化類型的。這樣的庫的用戶將不會受益於完整的Java類型系統,並且客戶端代碼將具有未經檢查的警告並使用原始類型

  2. 聲明Type參數和動態讀取類型參數。這類庫的用戶將使用一個稱爲type token的成語將Type參數傳遞給庫。演示代碼

RuntimeSchema.getSchema(new MyTypeToken<Message<String, Integer>>(){{}}); 

注意new MyTypeToken<Message<String,Integer>>(){{}}是一個匿名類型,保持約類型參數的信息,否則由編譯器刪除,而不是在運行時可用。