• Scala中的"null" 和“_”来初始化对象


    Alternatives

    Use null as a last resort. As already mentioned, Option replaces most usages of null. If you using null to implement deferred initialisation of a field with some expensive calculation, you should use a lazy val.

    Canonical initialisation to null

    That said, Scala does support null. I personally use it in combination with Spring Dependency Injection.

    Your code is perfectly valid. However, I suggest that you use var t: T = _ to initialize t to it's default value. If T is a primitive, you get the default specific to the type. Otherwise you get null.

    Not only is this more concise, but it is necessary when you don't know in advance what T will be:

    scala> class A[T] { var t: T = _ }
    defined class A
    
    scala> new A[String].t
    res0: String = null
    
    scala> new A[Object].t            
    res1: java.lang.Object = null
    
    scala> new A[Int].t   
    res2: Int = 0
    
    scala> new A[Byte].t
    res3: Byte = 0
    
    scala> new A[Boolean].t
    res4: Boolean = false
    
    scala> new A[Any].t   
    res5: Any = null

    Advanced

    Using var t: T= null is a compile error if T is unbounded:

    scala> class A[T] { var t: T = null }
    <console>:5: error: type mismatch;
     found   : Null(null)
     required: T
           class A[T] { var t: T = null }

    You can add an implicit parameter as evidence that T is nullable -- a subtype of AnyRef not a subtype of NotNull This isn't fully baked, even in Scala 2.8, so just consider it a curiousity for now.

    scala> class A[T](implicit ev: Null <:< T) { var t: T = null }           
    defined class A

    参考链接:

    https://stackoverflow.com/questions/2440134/is-this-the-proper-way-to-initialize-null-references-in-scala



  • 相关阅读:
    iOS 内购讲解
    实现抓图的工具2
    实现抓图的工具
    关于胖客户端
    实时进销存
    DataGridView隔行显示不同的颜色
    C#数据库绑定
    VS2012中数据库架构的比较
    delphi使用outputdebugstring调试程序和写系统日志
    drupal7安装中文错误
  • 原文地址:https://www.cnblogs.com/hubavyn/p/8058215.html
Copyright © 2020-2023  润新知