关于支持.NET中的非可空引用类型,存在许多问题.最大的希望是代码合同,但它仅限于运行时检查那些预算有限的人.
至于Code Contracts之外的其他方法,Jon Skeet 几年前写了一篇关于此的博客文章,其中一位评论者提供了一个有用的NonNull结构,修改了IL以禁用默认构造函数.这似乎是一种很好的方法,我可以想象扩展它以提供各种不可空的微型.IL操作可以是由结构上的属性触发的构建后步骤,例如
//Microtype representing a non-zero age, so we want to disable the default ctor
[NoDefaultConstructor]
public struct Age
{
public Age(int age)
{
// Implementation (including validation) elided
}
}
Run Code Online (Sandbox Code Playgroud)
在我进一步调查之前,我想问一下是否有人知道这可能导致的任何问题?我一直没能想到.
使用这样的代码:
- (nonnull NSString *)testing {
return nil;
}
Run Code Online (Sandbox Code Playgroud)
我不应该收到编译器警告吗?我没有得到任何警告,这似乎使整个可空性的东西看起来毫无用处?
我使用IntelliJ的空检查机制来防止nullpointer崩溃.我已经使用此答案成功将所有Java方法参数设置为@NonNull .
创建package-info.java之后,用于在Java中定义包注释.作为该包的直接后代的所有java文件都具有在我的Android Studio项目中具有默认@NonNull参数的方法.
显而易见的问题是我需要为该包中的所有Java类定义@ParametersAreNonnullByDefault,即包括所有子包.
如何定义@ParametersAreNonnullByDefault以便它传播到所有子包java文件?我想默认使用@NonNull注释我的所有内部代码方法.
/**
* File: package-info.java
* Make all method parameters @NonNull by default
*/
@ParametersAreNonnullByDefault
package com.intive.nearbyplaces.main;
import javax.annotation.ParametersAreNonnullByDefault;
Run Code Online (Sandbox Code Playgroud) 我使用 C# 8 可空引用类型。
我有一个泛型类,它可能接受可为空引用类型作为类型参数。
有没有办法根据泛型类型参数声明不可为空的类型,这些参数可能是可为空的引用类型(甚至是可空结构)?
abstract class Selector<T>
{
T SelectedItem;
// how to make item parameter not nullable?
abstract string Format(T! item);
// how to make item parameter not nullable?
Func<T!, string> FormatFunction;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的项目中使用 django-orderedmodel ( https://github.com/kirelagin/django-orderedmodel )。
运行 makemigrations 不起作用:
You are trying to add a non-nullable field 'order' to slide without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py
Select an option:
Run Code Online (Sandbox Code Playgroud)
我想知道我在哪里做错了。谢谢
这个问题哪个@NotNull的Java注解,我应该使用?是过时的,有点基于意见。从那时起,Java 8 以及更新的 IDE 出现了。
虽然 Java 8 允许通过集成JSR 308进行类型注释,但它没有附带任何注释。来自JSR 308 解释:Josh Juneau 的 Java 类型注释:
JSR 308,Java 类型注解,已作为 Java SE 8 的一部分合并
。...
编译器检查器可以编写来验证注解的代码,通过在代码不满足某些要求时生成编译器警告来强制执行规则。Java SE 8 不提供默认的类型检查框架,但可以编写自定义注解和处理器来进行类型检查。还有很多类型检查框架可以下载,它们可以作为Java编译器的插件来检查和强制执行已经注解的类型。类型检查框架包括类型注释定义和一个或多个与编译器一起用于注释处理的可插拔模块。
仅考虑提供至少某种@CanBeNulland 的解决方案@CannotBeNull,我找到了有关以下内容的信息(可能是错误的):
org.eclipse.jdt.annotation. 其他 IDE 有各自的包。使用 JSR 308,并且仍然支持 Java 8 之前的注释。javax.annotation。使用休眠的JSR 305,它似乎没有使用 Java 8 的类型注释。尽管它没有集成到 Oracle 的 API 中,但出于某种原因它仍然使用javax域,这意味着它确实如此。org.checkerframework.checker.nullness. …Flow定义了所谓的"Maybe types".即?string类似于string | null | void(void是一种值undefined).
有什么样的一般类型,可以是但是任何价值null和undefined?基本上类似于$Diff<$Diff<any, null>, void>if $Diff运算符能够在非对象类型上操作.
Rust 具有ptr::NonNull表示非NULL指针的类型。在 FFI 中使用这种类型是否安全?
是否保证具有相同的二进制表示(忽略非 FFI 上下文,例如Option优化)、对齐、寄存器使用*mut T?
例如,我可以实现这个接口:
void call_me_from_c(char *without_nulls) __attribute__((nonnull));
Run Code Online (Sandbox Code Playgroud)
和
extern "C" fn call_me_from_c(without_nulls: ptr::NonNull<c_char>)
Run Code Online (Sandbox Code Playgroud)
我不希望这会做任何事情(除了在误用NULL;时导致 UB 之外),但我希望接口记录该函数需要非NULL参数。
import 'package:freezed_annotation/freezed_annotation.dart';\nimport 'package:flutter/foundation.dart';\n\npart 'address.freezed.dart';\npart 'address.g.dart';\n\n@freezed\nclass Address with _$Address {\n const factory Address({\n @required String placeFormattedAddress, @required String placeName, @required String \n placeId,@required double latitude, @required double longitude,}) = _Address;\n\n factory Address.fromJson(Map<String, dynamic> json) =>_$AddressFromJson(json);}\nRun Code Online (Sandbox Code Playgroud)\n这是我的 pubspec.yaml
\npublish_to: 'none'\n\nversion: 1.0.0+1\n\nenvironment:\n sdk: ">=2.12.0 <3.0.0"\n\ndependencies:\n flutter:\n sdk: flutter\n \n freezed_annotation: ^0.14.1\n json_serializable: ^4.1.0\n flutter_hooks: ^0.16.0\n hooks_riverpod: ^0.13.1\n\ndev_dependencies:\n flutter_test:\n sdk: flutter\n …Run Code Online (Sandbox Code Playgroud)