次のアプローチには問題があります。
> public Class<List<String>> getModelType() {
> return (Class<List<String>>) new ArrayList<String>().getClass();
> }
たとえば、オブジェクトがタイプを言うかどうかをテストしたい場合
org.eclipse.emf.common.util.BasicEList<String>
タイプです
List<String>
前述のgetModelType()アプローチの結果に基づいて、次に例を示します。
BasicEList<String> fromObject = ...;
if (getModelType().isAssignableFrom(fromObject.getClass())) {
transferFromModelToUi(getModelType().cast(fromObject));
}
両方のオブジェクトがインターフェイスListを実装しているため(getModelType()はArrayListではなくList型のClassオブジェクトを返すため)、trueになるはずですがfalseになります。
これが私のために働いたアプローチです(少し面倒ですが、上記の例では正しい結果につながり、静的初期化子に移動できます):
public Class<List<String>> getModelType() {
Class<?> arrayListClass = new ArrayList<String>().getClass();
Class<?>[] interfaces = arrayListClass.getInterfaces();
int index = 0;
for (int i = 0; i < interfaces.length; i++) {
if (interfaces[i].equals(List.class)) {
index = i;
break;
}
}
return (Class<List<String>>) interfaces[index];
}