現在公開されているものから取得を試みましたが、
現状のものでは難しいので、サンプルコードを書きました。
APIにおいてIClassから以下のサンプルコードをご使用くださいませ。
private static String getBoundsClassString(IClass boundsClass) {
if(isAnonymousBoundClass(boundsClass)) {
StringBuilder sb = new StringBuilder();
ITemplateBinding[] templateBindings = boundsClass.getTemplateBindings();
for (int i = 0; i < templateBindings.length; i++) {
sb.append(getTemplateBindingString(templateBindings[i]));
if (i + 1 != templateBindings.length) {
sb.append(" , ");
}
}
return sb.toString();
} else {
return boundsClass.getName();
}
}
public static boolean isAnonymousBoundClass(IClass boundsClass) {
return boundsClass != null
&& boundsClass.getName().equals("")
&& boundsClass.getTemplateBindings() != null
&& boundsClass.getTemplateBindings().length != 0;
}
private static String getTemplateBindingString(ITemplateBinding templateBinding) {
StringBuilder sb = new StringBuilder();
IClass template = templateBinding.getTemplate();
if (template == null) {
return sb.toString();
}
sb.append(templateBinding.getTemplate().getName());
sb.append("<");
Map actualMap = templateBinding.getActualMap();
IClassifierTemplateParameter[] templateParameters = template.getTemplateParameters();
for (IClassifierTemplateParameter param : templateParameters) {
Object actual = actualMap.get(param);
if (actual instanceof IClass) {
sb.append(((IClass)actual).getName());
} else if (actual instanceof String) {
sb.append(actual);
} else {
Object defaultValue = param.getDefaultValue();
if (defaultValue instanceof IClass) {
if (isAnonymousBoundClass((IClass)defaultValue)) {
ITemplateBinding defaultTemplateBinding = ((IClass)defaultValue).getTemplateBindings()[0];
sb.append(getTemplateBindingString(defaultTemplateBinding));
} else {
sb.append(((IClass)defaultValue).getName());
}
} else if (defaultValue instanceof String) {
sb.append(defaultValue);
} else {
sb.append("?");
}
}
sb.append(param.getTypeModifier());
}
if ("<".equals(sb.toString())) {
sb.append("?");
}
sb.append(">");
return sb.toString();
}
しかしながら、文字列取得が回りくどいと思いますので、
今後IClassにジェネリクスが含まれる型の文字列の取得の
メソッドを追加することを検討いたします。