【问题标题】:In Java, how can I generate a templated object from a type name?在 Java 中,如何从类型名称生成模板化对象?
【发布时间】:2017-07-10 00:33:47
【问题描述】:

我正在尝试为名称作为字符串传入的类创建一个 SpecificDatumReader。我可以创建其中一个类,并且可以获取此类的 Class,但实际上这些都不允许我创建模板化对象。

    String[] classList = conf.getClasslist(eventname);
    decoders = new LinkedList<SpecificDatumReader>();
    for (String className : classList)
    {
        Class<?> eventclass = Class.forName(className);
        Object holder = eventclass.newInstance();
        decoders.add(new SpecificDatumReader<WhatGoesHere?>(eventclass));
    }

【问题讨论】:

  • Java 没有模板类型,泛型是一种编译时类型检查功能(另请参阅类型擦除)。
  • 不要使用原始类型。
  • 鉴于(正如 Elliott 所说)泛型是一种编译类型检查功能,我不相信您需要在创建对象时告诉程序类型参数是什么,因为它无论如何都不会存储在您的列表中。所以只要new SpecificDatumReader&lt;Object&gt;(whatever) 应该可以正常工作。
  • 我在这里得到了相互矛盾的建议。 Shmosel 坚持我不应该使用原始类型,但其他 cmets 告诉我指定是不可能的。指定 与没有指定有什么不同吗?
  • @RobertRapplean 它关闭了关于原始类型的编译器;-)

标签: java templates reflection


【解决方案1】:

你不能。

  1. Java 没有模板。您发布的语法的正确名称是泛型。
  2. 您询问的参数是编译时常量(类名),而不是运行时变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2013-04-26
    • 2021-07-25
    • 2018-03-10
    • 1970-01-01
    相关资源
    最近更新 更多