powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка getter'a
19 сообщений из 19, страница 1 из 1
Ошибка getter'a
    #38885900
aleapv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые форумчане.

Разъясните, пожалуйста, как избежать ошибки в getter'e,
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class A {
	
	private A field;
	
	public A getField() {
		return field;
	}
	
	public static void main(String[] args) {
		A a = new A();
		A b = a.getField();
	}
}


если при работе с объектом b изменяется также поле field объекта a.
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886060
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleapv,

а что у вас не так?
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886071
aleapv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DDiver,

в eclipse автогенерация геттера всегда выполняется так,
очень удобно когда полей много (30) и сторонняя библиотека
требует геттеры и сеттеры.

Я сейчас читаю Хорстманна. Он пишет, что такие геттеры
могут привести к ошибкам. Предлагает в случаях когда можно
случайно изменить объект по ссылке использовать метод clone().
В связи с тем, что он требует переопределения, т.к. осуществляет поверхностное копирование и
по словам Хорстманна не очень популярен(в 5% классов основной библиотеки) я решил узнать
как еще это можно решить.
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886074
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleapvОн пишет, что такие геттеры
могут привести к ошибкам. Предлагает в случаях когда можно
случайно изменить объект по ссылке использовать метод clone().
ну так когда появится ошибка то, тогда и думать надо, а так зачем искать решение проблемы которой у вас может быть и не будет
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886075
ForkJoin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так вот b и есть поле field объекта а.
Проверьте на :
System.out.println(a == b); // ответ false
System.out.println(a.equals(b)); // ответ false
System.out.println(a.toString()); // .....@descriptor
System.out.println(b.toString()); // ....java.lang.NullPointerException
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886165
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю обсудить сабж. Который мы недавно перетирали на работе.
Сеттер и геттер для date имеет копирующую природу в данном кейсе
и связывающую (вариант который я закомментарил).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
package mayton;

import java.util.Date;

public class FuckenEntity {

    private String name;
    private Date date;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getDate() {
        //return date;
        return new Date(date.getTime());
    }

    public void setDate(Date date) {
        //this.date = date;
        this.date = new Date(date.getTime());
    }
}
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886222
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПредлагаю обсудить сабж. Который мы недавно перетирали на работе.
Сеттер и геттер для date имеет копирующую природу в данном кейсе
и связывающую (вариант который я закомментарил).


Геттеры/Сеттеры в java это костыль для эмуляции property.

В вашем коде сеттер не нужен, как и само поле, т.к. всегда возвращается "new Date();"
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886233
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчёт костыля я 100% согласен т.к. сам сторонник этой мысли уже давно.

Ну суть моего месседжа в другом. Допустим (условия таковы) мы играм
по правилам EJB/SpringBeans. И стоит задача - реализовать property date.

Закомментаренный вариант - предлагает среда разработки ItellijIdea
при использовании мастера создания пропертей. Другие среды разработки
(я подозреваю) предложат тот-же вариант.
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886236
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЗакомментаренный вариант - предлагает среда разработки ItellijIdea
при использовании мастера создания пропертей. Другие среды разработки
(я подозреваю) предложат тот-же вариант.

Ну шаблон для геттеров/сеттеров для любого типа один и тот же.
Какой объект положили, такой и отдаем.
Зачем создавать новый объект с данными от старого я честно говоря не понимаю...
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886240
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимаешь?
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886251
aleapv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНасчёт костыля я 100% согласен т.к. сам сторонник этой мысли уже давно.

Ну суть моего месседжа в другом. Допустим (условия таковы) мы играм
по правилам EJB/SpringBeans. И стоит задача - реализовать property date.

Закомментаренный вариант - предлагает среда разработки ItellijIdea
при использовании мастера создания пропертей. Другие среды разработки
(я подозреваю) предложат тот-же вариант.

То есть автогенерация в общем случае только для простых типов и неизменяемых объектов?
Почему среда разработки даже не намекает?
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886305
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleapv,

Это основы Java. Надо понять что все объекты передаются по ссылке.
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886392
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleapvmaytonНасчёт костыля я 100% согласен т.к. сам сторонник этой мысли уже давно.

Ну суть моего месседжа в другом. Допустим (условия таковы) мы играм
по правилам EJB/SpringBeans. И стоит задача - реализовать property date.

Закомментаренный вариант - предлагает среда разработки ItellijIdea
при использовании мастера создания пропертей. Другие среды разработки
(я подозреваю) предложат тот-же вариант.

То есть автогенерация в общем случае только для простых типов и неизменяемых объектов?
Почему среда разработки даже не намекает?
Это не ее задачи. Это достаточно глубокий анализ и IDE не может знать глубину замысла.
Для нас вопрос возник лишь тогда когда плагин FindBug указал на vulnerability.

Если мне не изменяет память. Да и сам по себе вопрос неоднозначен. Применительно
к entity - совет будет один. К другому паттерну - возможно линкинг объектов это
очень даже нормально.
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886417
aleapv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

спасибо за подробный ответ.

Про FindBug для Java я и не знал даже. Уже не терпится протестить свои программы
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38886421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не спеши. В попытке срочно следовать советам findbug ты можешь еще наплодить
новых ошибок и антипаттернов.

Хотя очевидные - исправить имеет смысл. У нас к примеру findbug эффективно находил
ветки кода которые никогда не исполняются.
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38887829
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,


maytonНе понимаешь?

ага, я тоже не понимаю. Date - immutable (если не пользовать depricated), так что это лишнее засирание хипа
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38887848
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это тебе домашнее задание, Пеньков.

1)Найти, где описано про иммутабельность java.util.Date.
2)Установить плагин FindBug и почитать его рекомендации касаемо закомментаренного кода FuckenEntity
3)Придумать кейсы когда эта уязвимость воспроизводится.

Всего.
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38888246
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
да, я поглядел там setTime

anyway, я бы просто использовал long - решает все проблемы.
...
Рейтинг: 0 / 0
Ошибка getter'a
    #38888252
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для тех кто катается на восьмёрке есть immutable сущность LocalDateTime

http://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

Насчёт long - не возражаю. Это даже экономит память на сборке мусора. Но это (для наших
проектов) потребует переписывания значительной части кода. Где семантика Date должна
быть перенесена в длинное целое.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка getter'a
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]