【问题标题】:java bind template dynamicallyjava动态绑定模板
【发布时间】:2011-02-07 15:28:59
【问题描述】:
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&lt;T&gt; = T.class 的东西,这不是合法的java,但可以根据Reflecting Generics 解决

【问题讨论】:

    标签: java templates generics


    【解决方案1】:

    FWIW 我认为这是一个坏主意,既是因为我建议的原因,也是因为我们违背了语言的自然流动。

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 2011-01-10
      • 2020-11-04
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      相关资源
      最近更新 更多