- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我收到错误...
The return type is incompatible with 'Set<Map.Entry<K,T>>' returned from Map<K,T>.entrySet() (mismatching null constraints)
...当实现 Map
并重写 Map.entrySet
时,如下所示:
package org.abego.util;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
...
public abstract class MyMap<K, T> implements Map<K, T> {
private Map<K, T> map = new LinkedHashMap<>();
@Override
public Set<java.util.Map.Entry<K, T>> entrySet() {
return map.entrySet();
}
...
}
包org.abego.util
将默认的空值定义为@NonNull
:
@org.eclipse.jdt.annotation.NonNullByDefault
package org.abego.util;
我发现消除该错误的唯一方法是使用 @NonNullByDefault({})
注释“删除 entrySet
的默认空注释”:
package org.abego.util;
...
import org.eclipse.jdt.annotation.NonNullByDefault;
public abstract class MyMap<K, T> implements Map<K, T> {
...
@Override
@NonNullByDefault({})
public Set<java.util.Map.Entry<K, T>> entrySet() {
return map.entrySet();
}
...
}
虽然这确实有效,但我想知道这是否是修复错误的正确方法。
(我使用的是 Eclipse 4.5 (Mars) 和 jdk1.8.0_60。)
最佳答案
您正在尝试重写此方法:
Set<Map.Entry<K, V>> entrySet();
使用有效签名为的方法
@NonNull Set<@NonNull Map.Entry<K, V>> entrySet();
这是一个不兼容的覆盖,可以通过此调用者演示:
Set<Map.Entry<Foo,Bar>> entries = someMap.entrySet();
entries.add(null);
如果someMap
类型为MyMap
那么元素类型为entries
是 @NonNull
,但是java.util.Map.entrySet()
的合约 promise Set
哪里null
元素是可以容忍的(集合没有指定其元素为空)。在同一个对象 @NonNull
上混合两个合约(带有 entries
和未指定)将破坏假定非空元素的客户端。
查看 entrySet()
的 Javadoc ,但是应该可以安全地假设 Map.entrySet()
将始终返回 Set
与非空元素。因此,问题的根源在于 java.util.Map.entrySet()
没有空注释。
自从火星 eclipse 以来,这个问题可以通过 external null annotations 来克服。你可以告诉编译器 Map.entrySet()
的返回类型事实上是@NonNull Set<@NonNull Map.Entry<K,V>>
,或者通过应用 Annotate command在 IDE 中,或者将以下代码片段放入文件 java/util/Map.eea
在 configured as the location for external annotations 的目录中对于 JRE:
class java/util/Map
entrySet
()Ljava/util/Set<Ljava/util/Map$Entry<TK;TV;>;>;
()L1java/util/Set<L1java/util/Map$Entry<TK;TV;>;>;
有了这样的外部注释,您的程序将被 JDT 的空分析所接受。
关于java - 实现 Map.entrySet 时出现 'mismatching null constraints' 错误(Java8、Eclipse),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32539321/
equal() 算法可以告诉我们两个序列是否匹配。mismatch() 算法也可以告诉我们两个序列是否匹配,而且如果不匹配,它还能告诉我们不匹配的位置。 mismatch() 的 4 个版本和 equ
我只是想在 emacs 中自定义一些 org-mode 导出设置,所以我做了 M-xcustomize-group组织导出 html。这是由 Customize buffer 提出的,除其他外,我着手
我正在尝试通过 ColdFusion 使用基于 HTTPS 的 SOAP WebService,但它返回“连接失败”。 在转储结果变量时,它显示: 错误详细信息:“I/O 异常:证书‘subdomai
我想匹配表单的输入:: commit a1b2c3 Author: Michael commit d3g4 Author: David 这是我写的语法: grammar commit; file
我正在尝试根据《Doing Bayesian Data Analysis: A Tutorial with R, JAGS, and Stan (2015)》一书来学习贝叶斯分析。 这本书里有例子。所
我有一些使用 java 泛型的类,一切都工作正常,直到我向类层次结构添加了一些附加层。 我想知道问题是否与“类型删除”有关,但我不确定如何表达继承来消除这个问题。 类定义: public interf
我正在尝试向我的应用程序添加一种语言,它一直运行到现在。经过一天尝试了解发生了什么,我放弃了。 这是我的问题: 我的基本语言是英语(开发语言),我的其他语言是法语。我在 Main.storyboard
我最近开始在 Go 中使用模块,但我经常遇到这样的问题,即在一台机器上一切正常,但在另一台机器上构建代码库时遇到校验和不匹配。 问题总是涉及相同的第三方依赖(github.com/ericlagerg
今天在用织梦系统搭建新站,在系统基本参数设置好了之后,像往常那样点击【确定】这个按钮,没想到却出现了Token mismatch!的提示,系统的基本参数无法改变,后经过查询,将出现Token mis
题目地址:https://leetcode.com/problems/set-mismatch/description/open in new window 题目描述 Theset S origi
在看似简单的任务上陷入了极大的困境...当我尝试隐藏 时出现类型不匹配错误多个 使用此代码的列.. 有什么更好的建议吗? 问候, Sub Hider() Sheets("Data So
大家好,我收到一个编译错误:类型不匹配。在下面的代码中。我希望你们能帮助我。谢谢! Private Sub cmbBusId_AfterUpdate() With Me .txtStOdo = App
我最近遇到了一条我从未见过的借用检查器消息,我试图理解它。这是重现它的代码(简化的,现实生活中的例子更复杂)- playground : fn foo(v1: &mut Vec, v2: &mut V
我尝试编写代码以打印Z字符。 zzzzzzz z z z z z zzzzzzz 但是当我编译这段代码时,它会抛出 D:\erlang\graphics>erlc zee
Sub Reset_Bet() Application.ScreenUpdating = False Sheets("Bet Angel").Select
我很难弄清楚这段应该是基本的代码片段出了什么问题。我想知道是否有人可以帮助我。任何想法都将非常感激,我对 VBA 还很陌生。 我的代码是: Dim table() as Variant: ta
我只是想从键盘读取整数、 double 、字符串值。它对于整数和 double 工作正常。但当涉及到字符串时,它会抛出输入不匹配异常,因此我无法从键盘读取字符串。 import java.util.S
给定一个学生花名册文件,其中第一行是类(class)中的学生人数,在接下来的几行中,我提供了他们的姓名、ID 和年龄,如下所示: 5 Mary, 1010, 15 Ben, 1
Android资源编译失败C:\Users\TTP\AndroidStudioProjects\TicCrossGame\app\src\main\res\layout\activity_main.x
found : (Int, String, Option[java.lang.String]) required: (Int, String, Option[java.lang.String])
我是一名优秀的程序员,十分优秀!