【问题标题】:How to instantiate a Class<? extends Tag> object?如何实例化一个类<?扩展标签>对象?
【发布时间】:2018-06-07 11:23:43
【问题描述】:

我正在使用新的 API,但在实例化 Class 对象时遇到问题,API 定义了一个抽象类 Tag 及其子类,命名为 IntTag、DoubleTag、StringTag、ListTag... 等。我正在与目前最后一个,因为 构造函数如下:

public ListTag(final String name, final Class<? extends Tag> type, final List<Tag> value);

所以基本上第一个字段和最后一个字段我都没有问题,它就像一个json对象,这个是一个列表所以你输入名称和里面的内容,但是我不明白中间那个,我不'不明白如何实例化这种对象以及我应该在其中放入什么。

有什么建议吗?我刚刚了解了?扩展标签而不是标签,所以这不是我的问题,也不需要解释我的通用性(我希望?)

提前致谢!

--

如果你愿意,我也从here 下载了 API。

【问题讨论】:

  • 你不能。 Class&lt;? extends Tag&gt; 是一个抽象类型。只需使用 Class&lt;Tag&gt; 代替,通过 Tag.class
  • new ListTag("some Name", IntTag.class, myList) 怎么样。
  • 你不需要实例化那个类型的对象,你可以给它任何类型为 Tag 的对象或 Tag 的任何子类型。
  • 请不要尝试实例化Class 类型的对象。只需为此使用Classname.class。在您的情况下,只需Tag.class
  • 然后使用... DoubleTag.class 或其他任何东西。老实说,如果您此时不理解它,您应该回到关于继承等的教程。

标签: java class generics


【解决方案1】:

您将传入一个扩展 Tag 的类,例如 IntTag.classDoubleTag.class 等。

Class 类型没有公共构造函数,因此您无法使用典型的 new 语法实例化一个。你必须依赖编译器来解析class literalsIntTag.class 或者通过像Object.getClass 这样的函数来获取实例。

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2016-06-19
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多