Using class parameters to assign field value

2019-09-11 05:57发布

I'm new to scala and would like to use class parameters to assign the value to a field of the same. In Java, we do similar thing within a constructor:

public class Test{

    private final int value;

    public Test(int value){
        this.value = value;
    }
}

Now, I tried to do a similar thing in Scala:

class Test(value: Int){
   val value = ..WHAT..value //Is there a way to assign a parameter value to a field with the same name?
}

object Test{
   def testMethod = //access value and do something with it.
}

Can we do something similar to what we can in do in Java?

标签: java scala class
2条回答
放我归山
2楼-- · 2019-09-11 06:41

Scala provides a shorter syntax for creating such a member - just add the keyword val before the argument name in the class parameter list. You can also add a modifier (e.g. private):

scala> :paste
// Entering paste mode (ctrl-D to finish)

class Test(private val value: Int)

object Test {
  def testMethod(t: Test) = t.value
}

// Exiting paste mode, now interpreting.

defined class Test
defined module Test

scala> Test.testMethod(new Test(5))
res1: Int = 5
查看更多
放我归山
3楼-- · 2019-09-11 06:41

If you don't like exposing a private member, you could go for this:

class A {
  private var _quote = ""
  def quote = _quote
  def quote_=(newQuote: String) = _quote = newQuote
}

Which would you give you a getter and setter, both accessible by calling quote.

查看更多
登录 后发表回答