动态java绑定模板

时间:2011-02-07 15:28:59

标签: java templates generics

ITypeInfo typeInfo = getTypeInfoForName(IDerivedObject.TYPE_NAME);
List<IDerivedObject> objects = this.<IDerivedObject>readAllObjectsOfType(typeInfo);

public <T extends IBaseObject> List<T> readAllObjectsOfType(ITypeInfo typeInfo) throws Exception
{
    return ObjectBuilder.<T>readAllObjects(typeInfo);
}

IFF模板始终绑定到确切的实现类(例如,不是IBaseObject),模板参数T包含与typeInfo相同的信息。有没有办法减少这种重复的信息?这甚至是个好主意吗?我不确定,因为打电话

ITypeInfo typeInfo = getTypeInfoForName(IDerivedObject.TYPE_NAME);
List<IBaseObject> objects = this.<IBaseObject>readAllObjectsOfType(typeInfo);

是合法的java,因此如果意外调用则只构造BaseObject部分而不构造DerivedObject部分。

FWIW这意味着从模板定义的类中构造对象,需要类似Class<T> = T.class的东西,这不是合法的java,但可以解决Reflecting Generics

1 个答案:

答案 0 :(得分:0)

FWIW我认为这是一个坏主意,因为我建议的原因,因为我们反对语言的自然流动。