当前位置: 首页 > 面试题库 >

在通用类中嵌套通用

柴宏阔
2023-03-14
问题内容

我想在我的api中提供以下内容:

class Foobar extends AbstractThing<Double>

class EventThing<Foobar> {    
            public Foobar getSource();
            public Double getValue();
}

所以我这样写:

class EventThing<T extends AbstractThing<U>> {    
        public T getSource();
        public U getValue();
}

但是java无法解决U

随着EventThing<T extends AbstractThing<U>,U>代替它的工作原理,但第二个U实际上是多余的“事业AbtractThing已定义的类型。所以我喜欢摆脱它。


问题答案:

你不能摆脱它。第二个U不是多余的。您希望编译器将第U一个解释为类型参数,但事实并非如此。您也可以这样写:

class EventThing<T extends AbstractThing<Double>>

请注意,Double在这种情况下,它是一个具体的类,而不是类型参数。将此与以下内容进行比较:

class EventThing<T extends AbstractThing<U>>

请注意,它的形式与上面的第一行代码完全相同。在第一种情况下,编译器应该如何知道它Double是一个具体的类,而在第二种情况下,编译器又是如何U作为类型参数呢?

编译器不知道这一点,因此将其U视为具体类,就像Double第一行中的一样。让编译器知道它U是类型参数的唯一方法是这样指定它:

class EventThing<T extends AbstractThing<U>, U>


 类似资料:
  • 问题内容: 在以下示例中: 为什么对second(b)的调用有效,但对third(a)的调用却无效 ? 我收到以下错误: 问题答案: 如果您希望能够使用自变量进行调用,则需要将签名更改为此: 将上面的工作,因为不像,是兼容。这样想: 推理很简单。如果你有 然后,如果您 可以这样 调用该方法:

  • 问题内容: 发现了有关使我烦恼的无限制通配符的事实。例如: 尽管可以使用或返回类型,但失败。 有人可以告诉我确切原因吗?提前致谢。 更新资料 我认为,对于此问题,我似乎理解并最简单的解释(忽略所有这些复杂的规则)是Capture Conversion(link)中的最后一个注释: 问题答案: 了解通配符类型的含义很重要。 您已经了解了,您可以将您的as 隐式指定为任意类型,而对于任何可能引用了声明

  • 问题内容: 我对Java泛型中的嵌套嵌套通配符有疑问。 这是一个常见的情况: 这是标准的Java泛型,工作正常。 但是,如果通配符嵌套,它将不再起作用: 这会导致编译器错误。 我已经尝试了各种强制类型转换和通配符置换,但是无法正常工作。我不记得以前曾见过此问题,并且我使用泛型已有多年。我是否太累了,缺少明显的东西? 问题答案: 所以问题是,可以实现为: 您需要确定您的实际意思。 大概是这样的:

  • 问题内容: 我不确定这是什么技术术语,但请考虑一个接口: 然后是第二个界面: 是否可以将第二个接口设计为仅需要一个通用参数,然后使doSomethingRelated方法隐式提取其声明中的返回类型。这是不合法的,但这是我想知道是否可以通过其他方式完成: 编辑(关于赏金发布):在这一点上,我正在寻找的是语言需要这种重复的原因。直到现在,答案一直都没有得到答案。 问题答案:

  • 问题内容: 我正在使用node_redis,我想保存一个结构: 当前,我为每个用户创建一个JSON对象: 并做一个 是否可以将此结构嵌入到另一个结构(用户结构)中?如何设置具有该结构的users [“ alex”]? 问题答案: 据我所知,Redis中没有对嵌套结构的本地支持,但是可以使用set + hash(类似于分层树)对它们进行建模。散列可能最适合存储单个JSON对象的字段和值。我要做的是为