2013-09-09 5 views
0

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

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? 
} 

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

+0

Что вы имеете в виду со спутником? – Rollerball

+0

Жаль, что это должен быть сопутствующий объект –

ответ

2

Я получил это !!. Проблема была в строке:

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

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

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

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