Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3980148
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 20, 20262026-05-20T05:15:22+00:00 2026-05-20T05:15:22+00:00

Is it possible to use named arguments in a Scala constructor, and later on

  • 0

Is it possible to use named arguments in a Scala constructor, and later on override getters and setters without breaking the constructor interface or making the code extremely ugly?

Take the following bit of scala code

class Person( var FirstName: String, var LastName: String )

Nice and clean. This would create a simple class called person, which we could use in the following way

val john = new Person( FirstName="John", LastName="Doe" )
john.FirstName = "Joe"
println( john.FirstName )

Later, we decide we want to add some validation to the FirstName setter. As such, we create a new private local variable and override the getter and setter methods

class Person( var _FirstName: String, var _LastName: String ) {

    def FirstName = _FirstName  
    def FirstName_= (value:String) = _FirstName = value

}

Still somewhat clean, however in order to do this, we’ve had to change the constructor argument names, thus breaking the external interface.

The first solution to this problem I came up with was

class Person {
    var _FirstName:String = null 
    var LastName:String  = null

    def FirstName = _FirstName  
    def FirstName_= (value:String) = _FirstName = value

    def this( FirstName: String, LastName: String ){
        this()
        this._FirstName = FirstName
        this.LastName = LastName 
    }

}

Which is somewhat ugly and inelegant, and removes most of the nice reasons I was using scala in the first place.

Is there a better way of doing this?

tl;dr How to override getters/setters for members defined in the default constructor without making the code ugly or changing the public interface?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-20T05:15:23+00:00Added an answer on May 20, 2026 at 5:15 am

    If you’re not already using implicit conversions to create the arguments, you can do something like this:

    def validateName(s: String) = {
      if (s.length>0 && s(0).isUpper) s
      else throw new IllegalArgumentException(s+" is not a name!")
    }
    
    object Example {
      private[Example] class ValidatedName(val s: String) { }
      class Person(var firstName: ValidatedName, var lastName: String) { }
      implicit def string2valid(s: String) = new ValidatedName(validateName(s))
      implicit def valid2string(v: ValidatedName) = v.s
    }
    
    scala> new Example.Person("Joe","Schmoe")
    res17: Example.Person = Example$Person@51887dd5
    
    scala> new Example.Person("ee","cummings")
    java.lang.IllegalArgumentException: ee is not a name!
    

    It’s not binary compatible, but it is source compatible (again, if the names weren’t already relying upon implicit conversions).

    Another slightly longer possibility is to create a stealth ancestor:

    class CheckedPerson(private var first: String, var lastName: String) {
      def firstName = first
      def firstName_=(s: String) { first = validateName(s) }
    }
    class Person(firstName: String, lastName: String) extends
      CheckedPerson(validateName(firstName),lastName) { }
    

    for which I’m not sure about binary compatibility, but will definitely give source compatibility.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Is it possible to use 2 CSS classes that have the same name for
I have recently started looking into Google Charts API for possible use within the
Possible Duplicate: Use SVN Revision to label build in CCNET I'm working through the
Is it possible to use a flash document embedded in HTML as a link?
Is it possible to use Apache Subversion (SVN) as general purpose backup tool? (As
Is it possible to use Microsoft Entity Framework with Oracle database?
Is it possible to use an UnhandledException Handler in a Windows Service? Normally I
Is it possible to use gcov for coverage testing of multi-threaded applications? I've set
Is it possible to use an IF clause within a WHERE clause in MS
Is it possible to use both JScript and VBScript in the same HTA? Can

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.