Скопируйте конструктор создания мусорных объектов
Мой учитель дал мне 2 класса, один - паспорт, а другой - свидание.
date содержит 3 атрибута (строковый день, строковый месяц, строковый год), геттеры, сеттеры и 2 конструктора, один из которых является конструктором копирования:
public date(date dt)
this.day=dt.getd();
this.month=dt.getm();
this.yaer=dt.gety();
Класс паспорта содержит 2 атрибута (имя строки, дата exp(из класса даты)), и есть такая конструкция:
public passport(string name, date exp)
this.name=name;
this.exp= new date(exp);
теперь в основном классе, каждый раз, когда я создаю новую дату и новый паспорт, каждая дата дублируется, и я получаю 1 мусорный объект для каждого паспорта.
как я могу преодолеть этот мусорный объект?
3 ответа
Дополнительное решение:
в основном классе:
passport[] arr = new passport[100]; // we have 100 passports
date d1= new date () //null date
for (int i=0,i<100,i++) // we have 100 passports
{ d1.setd(); //our setter asks for an input
d1.setm();
d1.sety();
arr [i]=new passport (string name, d1); }
как я могу преодолеть этот мусорный объект?
Если date
экземпляры изменчивы, а вы нет; ты делаешь то, что делаешь.
если date
экземпляры являются неизменяемыми (их состояние не может быть изменено после того, как они были созданы), тогда вы просто используете данный экземпляр, а не создаете новый:
public passport(string name, date exp)
this.name = name;
this.exp = exp;
}
Вы бы не хотели этого делать, если exp
может быть изменено, потому что это будет создавать перекрестные разговоры между passport
экземпляр и все, что прошло exp
к этому.
как я могу преодолеть этот мусорный объект?
Пусть сборщик мусора делает свое дело: как Date
переменная передается в качестве параметра Passport
конструктор будет находиться за пределами контекста выполнения, лежащего в основе Date
объект будет иметь право быть собранным.
Самый простой способ сделать это - не назначать Date
объект к переменной.
Просто включите его экземпляр в Passport
вызов конструктора:
Passport passport = new Passport(name, new Date(day, month, year));