【问题标题】:Java generic map [duplicate]Java通用地图[重复]
【发布时间】:2015-06-26 16:32:03
【问题描述】:

如何在 Java 中定义这样的地图?

Map<Class<T extends myObject>, MyObjectConverter<T>>

问题在于两个参数中的TT 对于每个映射条目应该是不同的。但我希望地图仅限于“共享一个公共 T”的键值对

以下定义有效,但我认为必须有更好的方法 - 没有 CompilerWarnings:

Map<Class<? extends myObject>, MyObjectConverter>

【问题讨论】:

  • 什么是T?它在哪里声明?
  • 这就是重点:每个地图条目的 T 应该不同。但我希望地图仅限于“共享一个公共 T”的键值对
  • 等一下。您希望每个条目的 T 都不同吗?
  • 这是不可能的。对不起。
  • “每个地图条目的 T 应该不同。但我希望地图仅限于“共享一个公共 T”的键值对 - 你的已经描述过,而您使用导致警告的代码所破解的内容并不完全同步。您说您希望 T 对每个键值都不同,但您希望那些 T 共享一个共同点超类(例如:E)。T 的超类是实际的具体类,还是应该是可变的?

标签: java generics


【解决方案1】:

假设您有一个实现 Map 的类。

public class Cache<T> implements Map<... something ...> {
}

主要问题是您需要在 T 的类声明中澄清,而不是在 Map 接口的约束中。

public class Cache<T extends MyObject> implements Map<T, MyObjectConverter> {
  ...
}

同样(对于方法等),在将 T 用于约束参数之前,您需要澄清 T 的通用“类型”。

public <T extends MyObject> Collection<T> doFunc(T input, MyObjectConverter converter) {
  ...
}

【讨论】:

  • 从技术上讲,这不会满足约束;如果 OP 希望为每个映射条目使用不同的 T,那么这仍然会将 T 绑定到某个具体类的上限。
  • @Makoto - 这将满足他的需求,因为他在询问如何设置它,以便类型 T 是某个具体类型的子类 (MyObject)
猜你喜欢
  • 2013-03-01
  • 2021-04-12
  • 2017-12-04
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多