Переопределить метод toString не вызывается из объекта Companion

81
10

Я думал, что могу вызвать методы класса, как только я создал объект этого класса через объект-компаньон. Но я не могу этого сделать. Ниже мой код:

class Employee(val id: Int, val initialBalance: Int) {
val message = println("Object created with Id: " + id + " balance: " + initialBalance)

def printEmployeeDetails = "Id: " + id + " InitialBalance: " + initialBalance
override def toString = "Id: " + id + " InitialBalance: " + initialBalance
}

object Employee {
private var id = 0

def apply(initialBalance: Int) {
new Employee(newUniqueId, initialBalance)
}

def newUniqueId() = {
id += 1
id
}

}

object testEmployee extends App {
val employee1 = Employee(100)
employee1.printEmployeeDetails //getting error, why?
println(employee1) // This line is printing (), why?
val employee2 = Employee(200)
println(employee2) // This line is printing (), why?
}

Друзья, не могли бы вы помочь мне понять, почему он так себя ведет? Благодарю.

спросил(а) 2013-09-09T14:13:00+04:00 7 лет назад
1
Решение
70

Я понял!!. Проблема была в строке:

def apply(initialBalance: Int) {
new Employee(newUniqueId, initialBalance)
}

Я пропустил знак равенства, и поэтому мне не хватало ссылку на объект, даже если оно создавалось. Теперь код изменения:

def apply(initialBalance: Int) = {
new Employee(newUniqueId, initialBalance)
}

Сейчас он отлично работает. Благодарю.

ответил(а) 2013-09-09T14:36:00+04:00 7 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема