【问题标题】:Ensuring a an object type [duplicate]确保对象类型[重复]
【发布时间】:2018-06-19 09:22:56
【问题描述】:

每个人都知道,在进行任何强制转换之前,我们必须使用 instanceof 检查对象类型,但是,对于泛型,编译器不允许我们像这样使用泛型检查它。

if(object instanceof List<Message>)

我正在调查它的解决方案,有人说我们只需要与List 核对,但这对我无效。 我还检查了一些开发人员推荐使用isAssignableFrom,但它需要object 才能拥有一个实例。 那么如何在不创建技巧对象的情况下检查该对象是MessageList (而不仅仅是一个列表)?

【问题讨论】:

  • 你没有使用instanceof来投射。事实上,如果你做了很多未知的演员表,你很可能有一个你应该修复的设计缺陷。
  • 在使用泛型时应该使用PECS。当然,这只有在列表中的所有元素都满足条件/约束时才有效。

标签: java instanceof


【解决方案1】:

有点幼稚的方法

 Object deserializedList = fetchList();
 if (deserializedList instanceof List) {
   for (Object obj : (List)deserializedList) {
     if (obj instanceof Message) {
       Message message = (Message)obj;
       System.out.println("message: " + message);
     } else {
       System.out.println("not a message: " + obj);
     }
   }
 }

【讨论】:

  • 如果列表为空怎么办?
  • @HolaSoyEduFelizNavidad 然后foreach-loop 没有进入。您可能需要检查List 是否不是nullif ((deserializedList != null) &amp;&amp; (deserializedList instanceof List)) {
  • 这正是我的问题。我不想这样做。之后我可能需要在列表中添加一些内容。
  • "这正是我的问题。我不想这样做。" - 你不想做什么? “之后我可能需要在列表中添加一些内容。” - 添加到原始列表中?没有什么能阻止你这样做。请给我们一个明确的问题陈述。
  • 如果列表为空,我添加了一条消息,但它可能是其他内容的列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2020-04-27
  • 2013-06-06
相关资源
最近更新 更多