2013-12-20 1 views
1

Я хочу создать объект класса, ссылаясь на его объект. Я смог сделать это на C#, но в Java это не сработает. Это то, что я хочу сделать:Как создать объект, ссылаясь на свойство

controller.getDal().getStudentData().getPerson() = new Person(student.getIdNumber(), student.getName(), student.getAddress(), student.getTel()); 

Но я получаю сообщение об ошибке, говоря: Левая рука присваивания должен быть переменной

Как я могу решить эту проблему? Я пытался, как делать так:

register.AddStudent(controller.getDal().getStudentData().getPerson()); 

, а затем

System.out.println("Show info: " + controller.getDal().getStudentData().getPerson()); 

и выход я получаю: Person @ 7cd0a5d9

ответ

2

Java не имеет синтаксис свойств, что делает с # , вы должны использовать сеттер.

controller.getDal().getStudentData().setPerson(
    new Person(/*blah blah blah*/) 
); 

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

public void setPerson(Person newPerson) 
{ 
    this.person = newPerson; 
} 
+0

Я сделал сеттер перед тем, как сделать этот код. Спасибо за предложение. – Eskipo

+0

@Eskipo Это именно то, что C# свойства делают за кулисами. Это просто другой синтаксис –

+0

Хорошо, я постараюсь сделать это, и я скоро вернусь :) – Eskipo

1

О:

System.out.println("Show info: " + controller.getDal().getStudentData().getPerson()); 

Вы должны переопределить метод toString() внутри Person класса на поля или строковое представление, которые вы хотите видеть на печать.

Примером может быть:

@Override 
public String toString() { 
    return "Name: " + this.getName() + " Id Num: " + this.getIdNumber(); 
} 
+0

Спасибо, gtgaxiola, это на самом деле было одной из вещей, которые решили мою проблему. – Eskipo

2

Прямо сейчас вы пытаетесь установить новый человек, используя метод GET. Вы не можете установить объект в функцию. Вы находитесь на правильном пути с вашим кодом:

register.AddStudent(controller.getDal().getStudentData().getPerson()); 

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

register.AddStudent(controller.getDal().getStudent()); 

Таким образом, вы получаете студент, а затем добавить студент , Я не уверен, что вы пытаетесь достичь, но вы действительно должны смотреть на методы набора, такие, как что-то вроде:

Person p = controller.getDal().getStudentData().getPerson(); 
p.setIdNumber = 0011559966 
p.setAddress('123 C St'); 

Или даже что-то вдоль линий:

register.AddStudent(new Student("Billy", "Crystal", "123 C st")); 

Во всяком случае, если у вас было больше кода, я был бы в состоянии помочь вам больше, но это лучшее, что я могу представить без реального контекста.

+0

Я пробовал делать, как вы сказали, но не работал. Там я объединяю отношения между Person, который является базовым классом и Student, который является подклассом. Я покажу больше кода. – Eskipo

+0

Я решил это! Спасибо, ребята, за помощь. – Eskipo

+0

Я действительно не знаю, кому ответить. – Eskipo

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