2013-07-03 3 views
0

Я хочу, чтобы получить доступ к аргументу в частном конструктору без использования изменяемых переменных:Как аргумент от частного конструктора

class Class1 { 

    val strArgPublic = // get strArg argument from the private constructor. How? 

    private def this(strArg: String) = { 
    //..... 
    } 
} 

Я хочу, чтобы не только получить strArg и вернуть его, но изменить его немного и вернуть новую измененную копию.

Как я могу это сделать?

+0

Изменить его в частном конструктору а затем передать его основному конструктору. –

+0

Основной конструктор должен быть самым общим из всех конструкторов. Если вы хотите, чтобы тело класса было максимально чистым, вы можете использовать объект-компаньон с заводскими методами вместо конструкторов. –

ответ

3

В вашем классе есть не только частный конструктор. Существует также общественный конструктор. Вы должны решить, что будет стоить strArgPublic после публичного конструктора. Если есть не должно быть никакого общественного конструктора, вы должны определить свой класс как это:

class Class1 private(strArg: String) { 
    val strArgPublic = transform(strArg) 
} 

Если должен быть без параметров открытый конструктор вы можете определить один в качестве вспомогательного конструктора:

class Class1 private(strArg: String) { 
    val strArgPublic = transform(strArg) 
    def this() = this("default") 
} 
+0

Что значит, там есть общественный конструктор? Просто говорит, что «class Class1 {...}' подразумевает это? –

+0

не должно быть публичного конструктора. –

+0

@MariusKavansky: в каждом классе scala всегда есть первичный конструктор. – senia

Смежные вопросы