Tag: null

我需要关于Java中的null安全性的建议

我一直在阅读关于java中的beeing null safe的文章,以及如何return null或那个传递null作为参数的错误。 我得到它简化了生活,人们并不总是阅读文档,所以他们不知道方法可以return null ,或者如果null可以传递给它。 注释似乎只是污染了代码,并没有像Kotlin一样的无效安全机制。 在我目前的项目中,我尝试以这种方式设计所有的东西,至少对于最终用户来说几乎是不需要的。 我想创建一个更改监听器(类似javafx.beans.value.ChangeListener ),以便我可以传递一个以前和当前值的changed()方法。 事情是,我希望它是无效的,所以我不想永远传递一个null作为参数,即使它可以从无值改变到某个值,或者从某个值改变为无值。 我可以为这种情况添加两个额外的方法,并有类似的东西: public inteface ChangeListener { void valueSet(T current); void valueChanged(T previous, T current); void valueCleared(T previous); } 这种方法似乎过分。 我也可以使用java.util.Optional作为参数,但增加了额外的装箱: public inteface ChangeListener { void changed(Optional previous, Optional current); } 有更优雅的选择吗? 还是应该强制用户使用某种空对象模式 ? 虽然这会造成需要扩展一些类的问题。 我也可以停止关心,在文档中指定如果使用null ,会发生什么情况,并让用户find所有NullPointerExceptions的来源。

科特林。 如何检查是否可以通过reflection字段?

我正在开发一个代码生成器,在运行时从类中获取数据。 该发生器只能与Kotlin一起使用。 目前,我正面临着这个问题,因为我不知道如何检查该字段是否可以空。 所以主要问题是如何通过reflection来实现这个检查?

空合并操作符的替代方法

使用Java,为了安全地访问像abcde这样的深层嵌套的引用,我们通常必须在每个级别指定空的检查,或者在Optional s中使用orElse() 。 (与像Kotlin / C#这样a?.b?.c?.d?.e语言不同的是, a?.b?.c?.d?.e或类似的语言。 我想知道下面的辅助方法是否是一个合理的选择: public T valueOrNull(Supplier expression) { try { return expression.get(); } catch (NullPointerException e) { return null; } } 这可以安全地使用value = valueOrNull(() -> abcde) 。 注意:我明白捕获NullPointerException通常是由于性能原因等原因而皱起眉头,但想知道这里的用法是否是一个合理的例外。

数据库生成的属性不可用

我在一个基于Kotlin的项目中工作,它迫使我处理任何可能为null的属性。 在不受欢迎的情况下找出可能的空位是很好的; 但是我看到这么多了?. s和.!! s为数据库生成的属性,例如ID。 也许我在滥用这些运营商? 是否有任何约定标记属性不可空,但仍然有数据库生成值在这里? 如果我查找一个对象假设DB生成的值不再为空是安全的。 虚拟机可以被知道吗? 也许通过框架或语言提供的一些注释?

Kotlin Null安全警告意外令牌(使用;在同一行上分隔expression式)

我在应用程序中尝试使用Kotlin代码中的Elvis运算符 ,并收到以下警告: Unexpected tokens (use ; to seperate expressions on the same line) 码: var key: String = “KEY is” /* “check” is name of String variable which can be null Warning coming on following statement*/ var str : String = check?key.replace(“KEY”, “ABDS-ASDSA-DSSS”)?:check 任何想法如何解决这个问题?

Java – 在不允许使用@NotNull或@Nullable注释的情况下,在编译时检测NPE的最佳方法

我曾经使用大量的@NotNull/@Nullable注释来使IDE在编译时帮助我找出潜在的NPE 。 但是,我的新团队不允许使用@NotNull/@Nullable注释,也不允许使用那些允许的自定义注释。 因此,我比以前更有可能写出NPE导致的错误。 我尝试了几个解决方案: 在Java 8中使用Optional<T> 。但是,这不是每个案件都很好。 通常不建议使用Optional<T>作为字段或参数的类型。 Optional<T>实例本身可能为null也是非常令人沮丧的。 另外,调用ifPresent(obj->…)时,很难在lambda表达式中操作控制流(在Java 9中更容易)。 而使用太多的Optional<T>使代码有点冗长。 (更新:不幸的是, Optional<T>也被禁止使用) 使IDE将每个未注释的实例视为@Nullable 。 这个解决方案确实帮我找到了一些潜在的错误,但是IDE会建议我检查几乎所有的方法调用,这真的很烦人,因为许多方法都是故意不返回null 。 检查每个方法调用。 这是一个可行的解决方案,但是它具有严重的影响,即通过方法调用可能导致null 。 在这种情况下,一个方法的每个参数都可能为null ,并且当一个参数被检查为无效时,该方法通常会连续返回null 。 最后,每个方法都被“感染”,并有可能收到null参数并返回null 。 调用Objects.requireNonNull()来防止上述问题。 它稍微减少了无处不在的检查的痛苦。 但是,它不能保证当不允许null的情况下,调用者不会向null传递null 。 一旦null传递,抛出的运行时NPE更有可能破坏你的应用程序。 切换到kotlin。 当然,这是不允许的:) 是否有其他建议在编译时检测NPE(并保存我的工作)? 我认为这个问题的解决方案可以被广泛使用,不仅仅是帮助自己,因为并不是所有的团队都允许使用@NotNull/@Nullable注解和Optional<T> 。

Java null vs Swift nil

我来自我们使用NULL的Java / Android背景。 现在我正在做Swift / iOS,而且我对Swift的nil感到困惑。 我可以在Java中像NULL一样使用它吗? 它是以完全相同的方式行事,还是在使用方面有所不同?

如何使Android Studio实时检查了解@ParametersAreNonnullByDefault?

我想执行一些无效的安全级别,所以我在我的package-info.java文件中使用@ParametersAreNonnullByDefault,它放在我的应用程序包目录中。 我无法在Android Studio中找到正确的设置,使其读取package-info.java并根据其内容执行实时检查。 另外,在不使用Kotlin的情况下,推荐在Android代码中强制执行无效安全的做法是什么?

Kotlin / Java,字符串数组尚未在方法调用时初始化

在我的一个程序中,我得到了一个空的异常,并调试我发现这是因为我的String数组 ( Java )之一: val FRAGMENTS = arrayOf("phong-lighting", "phong-only", "blinn-lighting", "blinn-only") 还没有初始化时,我需要在一个连续的类方法 ( Java )中: fun initializePrograms(gl: GL3) { programs = Array(LightingModel.MAX, { ProgramPairs( ProgramData(gl, "pn.vert", FRAGMENTS[it] + ".frag"), ProgramData(gl, "pcn.vert", FRAGMENTS[it] + ".frag")) }) unlit = UnlitProgData(gl, "pos-transform.vert", "uniform-color.frag") } 如果我把它移进去: fun initializePrograms(gl: GL3) { val FRAGMENTS = arrayOf("phong-lighting", "phong-only", "blinn-lighting", "blinn-only") … } […]

Login Activity示例中的checkParameterIsNotNull错误

我正在尝试在Android Studio中使用标准样本启动kotlin。 首先,我使用Login Activity模板创建一个新项目,然后将其转换为使用kotlin。 但是我有这个字符串中的运行时 (不编译)错误: loaderManager.initLoader(0, null, this) 错误列表: Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter bundle