Scala class members and constructor parameters name clash

前端 未结 4 1780
北荒
北荒 2021-02-05 07:30

Consider the following class written in Java:

class NonNegativeDouble {
    private final double value;
    public NonNegativeDouble(double value) {
        this         


        
4条回答
  •  萌比男神i
    2021-02-05 08:01

    You can consider parametric field

    class NonNegativeDouble(val value: Double, private val name: String ){
      if (value < 0) throw new IllegalArgumentException("value cannot be negative")
      override def toString = 
        "NonNegativeDouble(value = %s, name = %s)" format (value, name)
    }
    
    val tom = "Tom"
    val k = -2.3
    
    val a = new NonNegativeDouble(k.abs, tom)
    a: NonNegativeDouble = NonNegativeDouble(value = 2.3, name = Tom)
    
    a.value
    res13: Double = 2.3
    
    a.name
    :12: error: value name in class NonNegativeDouble cannot be accessed in NonNegativeDouble
         a.name
    
    val b = new NonNegativeDouble(k, tom)
    java.lang.IllegalArgumentException: value cannot be negative
    ...
    

    It's defines fields and parameters with the same names "value", "name". You can add modifiers such as private ...

提交回复
热议问题