问题标签 [non-nullable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kotlin - 让 Kotlin 在将灵活/平台类型分配给非空类型时发出警告?
当从 Kotlin 调用非可空性注释的 Java 函数时,我们会得到灵活类型的返回值,用感叹号表示,例如String!
.
Kotlin 默默地允许将这些灵活的值分配给普通的非空类型,例如String
,这可能会在运行时导致 NullPointerExceptions。
我希望获得此类分配的编译器警告或错误。或者,将平台类型视为等同于可空类型(例如String?
)。
例如,使用此 Java 代码:
...和下面的 Kotlin 代码,我想在两个新行上得到错误(见评论):
关键是这将迫使我添加空检查或!!
,确保我至少必须明确说明。
这可能吗?
在这篇2014 JetBrains 博客文章的评论中,当他们引入平台/灵活类型时,听起来他们正计划添加一个选项来警告这些情况,但我无法找到任何进一步的信息。
java - 为 @Nonnull 注释参数编写单元测试
我有一个像这样的方法:
我想编写一个单元测试以确保在何时foo()
抛出 NPE但我不能,因为当在 IDE 中启用静态空指针流分析时编译器拒绝编译单元测试。value
null
如何编译此测试(在 Eclipse 中启用“启用基于注释的空分析”):
注意:理论上编译器的静态空指针应该可以防止这样的情况。但是没有什么能阻止某人在关闭静态流分析的情况下编写另一个模块并使用null
.
常见案例:没有流程分析的大杂乱旧项目。我从注释一些实用程序模块开始。在这种情况下,我将有现有的或新的单元测试来检查所有尚未使用流分析的模块的代码行为。
我的猜测是我必须将这些测试移动到一个未经检查的模块中,并在我展开流分析时移动它们。这会奏效并且非常符合哲学,但这将是大量的手工工作。
换句话说:我不能轻易地编写一个测试,上面写着“代码无法编译时成功”(我必须将代码片段放入文件中,从单元测试中调用编译器,检查输出是否有错误。 .. 不漂亮)。那么,当调用者忽略时,如何轻松@Nonnull
测试代码是否会失败?
objective-c - Objective-C 函数的结果默认是非空的吗?
在这个关于实现委托方法的线程UITextInput
中,发帖人说当他们对他们的代码运行静态分析时,他们在这个函数上得到一个错误:
错误是“从预期返回非空值的方法返回 nil”。
函数声明的结果没有可空性说明符。默认情况下函数结果是非空的吗?(这些天我主要在 Swift 中工作,并且对 Objective-C 的最新变化不是专家。)
kotlin - 即使支持字段可以为空,让 getter 返回不可为空的类型
num
设置时应该可以为空,但它返回的内容应该始终不可为空(具有默认值)。
即使返回的值始终为非空值,以下内容也无法编译,这对我来说很有意义,因为类型不是推断出来的,而是取自支持字段:
类型不匹配:推断类型是 Int?但预计 Int
问题是如何将该 getter 的返回类型更改为不可为空?如果我这样做,编译器会说:
Getter 返回类型必须等于属性的类型,即'Int?'
我知道我可以用另一个属性numNotNullable
(没有支持字段)来解决它。
但这不是我想要的。还有其他方法吗?
c# - url中的空参数
我有一些在控制器(MVC、C#)上调用操作方法的 javascript,定义了两个参数,都有值,但我得到一个空引用异常。这是调用动作方法的javascript
这是生成的网址
"/Benchmark/PopUp?cid=113&reportName=17"
这是 c# 动作方法
但我得到这个错误
参数字典包含方法'System.Threading.Tasks.Task`1 [System.Web.Mvc.ActionResult] PopUp(Int32)的不可空类型'Common.Helpers.EnumHelper + Reports'的参数'reportName'的空条目, 报告)”在“Controllers.Benchmark.BenchmarkController”中。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数
我无法弄清楚这个,参数没有拼写错误并且它有一个值,那么为什么我会收到这个错误?
java - 无法避免 Intellij 使用 @NotNull 抛出 IllegalArgumentException
当取消选中“为非空注释方法和参数添加运行时断言”不起作用时,我还能做些什么吗?它一直在扔IllegalArgumentException
。我也尝试禁用检查@NotNull/@Nullable problems
和Constant conditions & exception
s。我已经重新启动并重新启动并使缓存无效,并在Configure annotations
.
我在用着:
在 Ubuntu 16 上。
任何想法?
android - 使用 g++ 构建 adb 时无法识别 _Nonnull
我正在尝试从AOSP android 7.1.2 源代码构建 adb并使用 g++ (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609 编译它,方法是慢慢添加基于Android.mk和在我去的时候修复编译器的抱怨。到目前为止,我得到了以下命令,但我不确定如何解决以下错误:
似乎_Nonnull和_Nullable在./adb/sysdeps.h中定义
似乎 AOSP 7.1.2 附带 gcc 4.8。另外,我注意到-Wexit-time-destructors似乎不是我正在使用的 g++ 的一部分,也不是-compatibility_version
java - 定义上的@NonNull 注释- java 8
如何在项目上使用@NonNull
注释。List
让我们考虑一下,如果我想强制一个非空的字符串列表
这就是我们可以声明的方式: @NonNull List<String>
如果我们想强制,非空字符串列表。
我们怎么能做到这一点?
objective-c - NSError** '潜在的空值取消引用.....'
给出以下示例:
分析器将返回以下错误:
潜在的 null 取消引用。根据“创建和返回 NSError 对象”中的编码标准,该参数可能为空。
建议将其更改为:
但我更愿意在错误参数中添加一个非空属性,以阻止使用传递空值。我无法弄清楚如何让这个论点正确。双指针是否有可能具有非空属性?
intellij-idea - 默认情况下,未注释的方法可以为空
是否可以将 IntelliJ 或NullAway配置为默认情况下将非注释方法视为 Nullable?
例如以下方法:
context.getResources().getString(R.string.app_name);
未将getResources
其注释为可为空或非空。我认为在这些情况下收到“可能为空”的警告会很有趣,但 IntelliJ 或 NullAway 都没有告诉我它可能是 NPE。