2014-01-14 67 views
3

我有一個第三方接口Converter<PRESENTATION, MODEL>其中包含的方法實現接口方法返回類的類型參數的

Class<MODEL> getModelType(); 

我需要有一個擴展Converter<String, Id<SOMETYPE>>的實現,因此,以滿足編譯器,我需要實現下面的方法:

@Override 
public Class<Id<SOMETYPE>> getModelType() { 
    return Id<SOMETYPE>.class; // does not compile 
} 

這是一個角落的情況下,我需要恢復使用原始類型並實現Converter<String, Id>代替(使用原始類型Id)?

回答

4

由於類型擦除,一個Id<SOMETYPE>.class是一樣的一個Id.class,但您可以不返回前者或後者(編譯錯誤)。所以你需要欺騙編譯器,例如:

@Override @SuppressWarnings("unchecked") 
Class<List<String>> getModelType() { 
    return (Class<List<String>>)(Class<?>)List.class; 
} 
2

我最近也遇到過這個問題。這是幫助我的問題是:

Java casting ".class"-operator used on a generic type, e.g. List, to "Class<List<?>>" and to "Class<List<Integer>>"

你的情況的解決方法是這樣的:

public interface Converter<PRESENTATION, MODEL> { 
    Class<MODEL> getModelType(); 
} 

interface Id<E> { 
} 

class MyConverter<E> implements Converter<String, Id<E>> { 
    @Override 
    public Class<Id<E>> getModelType() { 

     @SuppressWarnings("unchecked") //We know this is okay 
     Class<Id<E>> cls = (Class<Id<E>>)(Class)Id.class; 
     return cls; 
    } 
} 
+0

+1提到類似的問題,我沒有找到任何。 – herman

相關問題