GVKun编程网logo

在Java中创建Nullables类型(java创建一个空list)

13

关于在Java中创建Nullables类型和java创建一个空list的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于execsp_tablesN''PROBABLYNOT'',NULL,

关于在Java中创建Nullables类型java创建一个空list的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于exec sp_tables N''PROBABLYNOT'',NULL,NULL,N''"''''TABLE''''"''、int? 竟然真的可以是 null!.NET/C# 确定可空值类型 Nullable 实例的真实类型、iOS 泛型中nullable、null resettable、null kindof 用法详解、iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

在Java中创建Nullables类型(java创建一个空list)

在Java中创建Nullables类型(java创建一个空list)

我正在尝试在Java中创建一个nullalble对象,但不知道如何执行此操作,在C#中将这样完成

int? someTestInt;

这使我可以检查是否为null,而在某些情况下,我可以使用0值,但这并不总是可能的,因为某些执行路径允许使用0值

答案1

小编典典

我不确定您想要什么,但是如果您想要一个也可以声明的整数值,则null可能要使用Integer该类:

Integer nullableInteger = 1;nullableInteger = null;System.out.println(nullableInteger); // "null"

有对应的类每个基元:CharacterLongDoubleByte,等。“标准库”数字类的所有扩展Number类。

请注意,自JDK 1.5起,Java
自动将这些对象自动装箱,因此您可以像使用原语一样使用
和声明 它们(不需要例如“ newInteger(1)”)。因此,尽管从技术上讲它们是对象(因此扩展了Object类,而原始int类型不是),但是您可以对它们进行基本的算术运算。它们在编译时转换为对象操作。

exec sp_tables N''PROBABLYNOT'',NULL,NULL,N''

exec sp_tables N''PROBABLYNOT'',NULL,NULL,N''"''''TABLE''''"''

数据库跟踪中有很多exec sp_tables N''PROBABLYNOT'',NULL,NULL,N''"''''TABLE''''"''.这样的语句。这种语句大量占用CPU.java程序怎么写,会造成这种结果。有谁会知道啊!求解

int? 竟然真的可以是 null!.NET/C# 确定可空值类型 Nullable 实例的真实类型

int? 竟然真的可以是 null!.NET/C# 确定可空值类型 Nullable 实例的真实类型

使用 Nullable<T> 我们可以为原本不可能为 null 的值类型像引用类型那样提供一个 null 值。不过注意:Nullable<T> 本身也是个 struct,是个值类型哦。这意味着你随时可以调用 .HasValue 这样的方法,而不用担心会出现 NullReferenceException

等等!除了本文提到的一些情况。


 

本文内容

      • Nullable 中的 null
      • Object.GetType () 和 is 对 Nullable 的作用
      • 应该如何判断可空值类型的真实类型
        • 参考资料

 

Nullable 中的 null

注意看以下的代码。我们创建了一个值为 nullint?,然后依次输出 value 的值、value.GetType()

你觉得可以得到什么结果呢?

public class Program
{
    public static void Main(string[] args)
    {
        int? value = GetValue(null);

        Console.WriteLine($"value = {value}");
        Console.WriteLine($"type  = {value.GetType()}");
        Console.WriteLine($"TYPE  = {typeof(int?)}");

        Console.ReadLine();
    }

    private static int? GetValue(int? source) => source;
}

 

结果是……

 

果是……

 

是……

 

……

 

 

崩掉了……

NullReferenceException

那么我们在 value 后面加个空传递运算符:

--  Console.WriteLine($"type  = {value.GetType()}");
++  Console.WriteLine($"type  = {value?.GetType()}");

现在再次运行,我们确认了 value?.GetType() 的值为 null;而 typeof(int?) 的类型为 Nullable<Int32>

null 的类型

然而,我们现在将 value 的值从 null 改为 1

--  int? value = GetValue(null);
++  int? value = GetValue(1);

竟然 value.GetType() 得到的类型是 Int32

1 的类型

于是我们可以得出结论:

  1. 对于可空值类型,当为 null 时,GetType() 会出现空引用异常;
  2. 对于可空值类型,当不为 null 时,GetType() 返回的是对应的基础类型,而不是可空值类型;
  3. typeof(int?) 能够得到可空值类型。

Object.GetType () 和 is 对 Nullable 的作用

在 docs.microsoft.com 中,有一段对此的描述:

When you call the Object.GetType method on an instance of a nullable type, the instance is boxed to Object. As boxing of a non-null instance of a nullable type is equivalent to boxing of a value of the underlying type, GetType returns a Type object that represents the underlying type of a nullable type.

意思是说,当你对一个可空值类型 Nullable<T> 调用 Object.GetType() 方法的时候,这个实例会被装箱,会被隐式转换为一个 object 对象。然而对可空值类型的装箱与对值类型本身的装箱是同样的操作,所以调用 GetType() 的时候都是返回这个对象对应的实际基础类型。例如对一个 int? 进行装箱和对 int 装箱得到的 object 对象是一样的,于是 GetType() 实际上是不能区分这两种情况的。

那什么样的装箱会使得两个不同的类型被装箱为同一个了呢?

另一篇文档描述了 Nullable<T> 装箱的过程:

  • If HasValue returns false, the null reference is produced.
  • If HasValue returns true, a value of the underlying value type T is boxed, not the instance of Nullable.
  • 如果 HasValue 返回 false,那么就装箱一个 null
  • 如果 HasValue 返回 true,那么就将 Nullable<T> 中的 T 进行装箱,而不是 Nullable<T> 的实例。

这才是为什么 GetType() 会得到以上结果的原因。

同样的,也不能使用 is 运算符来确定这个类型到底是不是可空值类型:

Console.WriteLine($"value is int  = {value is int}");
Console.WriteLine($"value is int? = {value is int?}");

最终得到两者都是 True

用 is 确定类型

应该如何判断可空值类型的真实类型

使用 Nullable.GetUnderlyingType(type) 方法,能够得到一个可空值类型中的基础类型,也就是得到 Nullable<T>T 的类型。如果得不到就返回 null

所以使用以下方法可以判断 type 的真实类型。

bool IsNullable(Type type) => Nullable.GetUnderlyingType(type) != null;

然而,这个 type 的实例怎么来呢?根据前面的示例代码,我们又不能调用 GetType() 方法。

实际上,这个 type 的实例就是拿不到,在运行时是不能确定的。我们只能在编译时确定,就像下面这样:

bool IsOfNullableType<T>(T _) => Nullable.GetUnderlyingType(typeof(T)) != null;

如果你是运行时拿到的可空值类型的实例,那么实际上此方法也是无能为力的。

public class Program
{
    public static void Main(string[] args)
    {
        Console.Title = "walterlv''s demo";

        int? value = GetValue(1);
        object o = value;
        Console.WriteLine($"value is nullable? {IsOfNullableType(value)}");
        Console.WriteLine($"o     is nullable? {IsOfNullableType(o)}");

        Console.ReadLine();
    }

    private static int? GetValue(int? source) => source;

    static bool IsOfNullableType<T>(T _) => Nullable.GetUnderlyingType(typeof(T)) != null;
}

运行时是拿不到的


参考资料

  • c# - Nullable type is not a nullable type? - Stack Overflow
  • How to: Identify a nullable type - C# Programming Guide - Microsoft Docs
  • Using nullable types - C# Programming Guide - Microsoft Docs

我的博客会首发于 https://walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。

知识共享许可协议

本作品采用知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://blog.csdn.net/wpwalter),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

iOS 泛型中nullable、null resettable、null kindof 用法详解

iOS 泛型中nullable、null resettable、null kindof 用法详解

 iOS9新出的关键字:用来修饰属性,或者方法的参数,方法的返回值

iOS9新出关键字nonnull,nullable,null_resettable,_Null_unspecified

需要注意的一点只能修饰对象,不能修饰基本数据类型.

虽然在项目的代码编写中不会经常用到,不过在调用苹果系统方法的时候还是会经常遇到,需要做一个总结

nullable作用:表示可以为空

nullable书写规范:
// 方式一:
@property (nonatomic, strong, nullable) NSString *name;
// 方式二:
@property (nonatomic, strong) NSString *_Nullable name;
// 方式三:
@property (nonatomic, strong) NSString *__nullable name;

nonnull作用:不能为空

nonnull: non:非 null:空
书写格式:
@property (nonatomic, strong, nonnull) NSString *icon;
@property (nonatomic, strong) NSString * _Nonnull icon;
@property (nonatomic, strong) NSString * __nonnull icon;

在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间,定义的所有对象属性和方法默认都是nonnull

null_resettable作用: get:不能返回为空, set可以为空

// 书写方式:
@property (nonatomic, strong, null_resettable) NSString *name;
// 注意;如果使用null_resettable,必须 重写get方法或者set方法,处理传递的值为空的情况

_Null_unspecified:不确定是否为空

书写方式只有这种
方式一
@property (nonatomic, strong) NSString *_Null_unspecified name;
方式二
@property (nonatomic, strong) NSString *__null_unspecified name;

__kindof:表示当前类或者它子类

__kindof书写格式:

放在类型前面,表示修饰这个类型(__kindof MyCustomClass *)

__kindof :在调用的时候,很清楚的知道返回类型 使用__kindof 修饰的类名既可以表示当前类,也可以表示当前类的子类

以上所述是小编给大家介绍的iOS 泛型中nullable、null resettable、null kindof 用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

您可能感兴趣的文章:
  • 如何利用泛型封装通用的service层
  • Java泛型枚举Annotation接口详细解读与Eclipse发展
  • C#实现利用泛型将DataSet转为Model的方法
  • C#读取数据库返回泛型集合详解(DataSetToList)
  • Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
  • Java SE之了解泛型

iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)

iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)

1、nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值)

代码:

 
 1 //三种使用方式都可以
 2 @property (nonatomic, copy, nonnull) NSString *name;  3  4 @property (nonatomic, copy) NSString * _Nonnull name;  5  6 @property (nonatomic, copy) NSString * __nonnull name;  7  8 //补充(不适用于assign属性,因为它是专门用来修饰指针的)  9 @property (nonatomic, assign) NSUInteger age; 10 11 //补充(用下面宏包裹起来的属性全部都具nonnull特征,当然,如果其中某个属性你不希望有这个特征,也可以自己定义,比如加个nullable) 12 //在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间,定义的所有对象属性和方法默认都是nonnull
 

 

1 //也可以在定义方法的时候使用
2 //返回值和参数都不能为空 3 - (nonnull NSString *)test:(nonnull NSString *)name; 4 //同上 5 - (NSString * _Nonnull)test1:(NSString * _Nonnull)name;

 这样,你在使用以上方法的时候会出现这种效果提示

同样,使用属性的时候:

 

2、nullable:表示可以为空(使用方法和上面几乎一样,但是没有发现和上面类似的宏)

代码(大概看一下,参考上面就行了):

 
1 //三种使用方式
2 // 方式一: 3 @property (nonatomic, copy, nullable) NSString *name; 4 // 方式二: 5 @property (nonatomic, copy) NSString *_Nullable name; 6 // 方式三: 7 @property (nonatomic, copy) NSString *__nullable name;
 

效果:

这样,当在使用这个属性的时候,Xcode的代码提示会告诉你这个属性是可以为空的,算是一种编程规范吧,减少程序员之间的交流。

 3、null_resettable: get:不能返回空, set可以为空(注意:如果使用null_resettable,必须 重写get方法或者set方法,处理传递的值为空的情况)

 // 书写方式:

 1 @property (nonatomic, copy, null_resettable) NSString *name; 

设置一下set或get方法

 
 1 - (void)setName:(NSString *)name
 2 {  3 if (name == nil) {  4 name = @"我叫畅敏";  5  }  6 _name = name;  7 }  8 - (NSString *)name  9 { 10 if (_name == nil) { 11 _name = @"我叫畅敏"; 12  } 13 return _name; 14 }
 

4、_Null_unspecified:不确定是否为空

使用方式只有这两种:

1 @property (nonatomic, strong) NSString *_Null_unspecified name;

1 @property (nonatomic, strong) NSString *__null_unspecified name; 

 

总结:我理解这些东西主要就是为了提高开发规范,提示使用的人应该传什么样的值,如果违反了对规范值的要求,就会有警告;

今天关于在Java中创建Nullables类型java创建一个空list的介绍到此结束,谢谢您的阅读,有关exec sp_tables N''PROBABLYNOT'',NULL,NULL,N''"''''TABLE''''"''、int? 竟然真的可以是 null!.NET/C# 确定可空值类型 Nullable 实例的真实类型、iOS 泛型中nullable、null resettable、null kindof 用法详解、iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)等更多相关知识的信息可以在本站进行查询。

本文标签: