如何获得Class <x <t>&gt;通过guava TypeToken

时间:2016-10-18 01:44:39

标签: java guava typetoken

有两个类,一个名为Service,另一个名为Domain。

class Domain<T> {
    String id;
    // some other common fields and methods
    T data;
    T getData() {
        return data;
    }

class Service<T> {
    T get(String id) {
        // here's we need a Class<Domain<T>> to do some work
        TypeToken<Domain<T>> typeToken = new TypeToken<Domain<T>>(getClass()){};
        // how to get `Class<Domain<T>>` from `typeToken` 
        Class<Domain<T>> = ...
    }
}

那么,如何从Class<Domain<T>>获取TypeToken<Domain<T>>

1 个答案:

答案 0 :(得分:0)

对于记录,询问“如何从MongoTemplate.findOne()检索泛型类型?”可能会给你一个much better answer

MongoTemplate API不接受TypeToken或任何其他通用捕获机制。这意味着它不能安全地支持返回泛型类型。假设你在编译时知道类型应该是什么,你可以做一个不安全的演员,但是:

Domain<T> domain = (Domain<T>) template.findOne(query, Domain.class);

请注意,这会传入Domain.class,因此findOne()将返回原始Domain实例,然后需要将其转换为Domain<T>以避免使用原始类型