@Urukhayy

Является ли нормальным постоянное создание экземпляров и использование их 1 раз?

Является ли нормальным, когда экземпляр класса создаётся для того, чтобы один раз вызвать его метод, и его ссылка никуда не сохраняется?

Пример:

new Window("Hello!").show();

Или:

double x = 1.0, double y = 1.0, double z = 1.0;
SomeClass.createObject(new Point(x, y, z)); // Создаётся экземпляр точки, и никуда не записывается. Используется 1 раз
  • Вопрос задан
  • 224 просмотра
Решения вопроса 2
@dinegnet
Является нормальным.

Но влияет на производительность/расходы памяти.
Если для конкретно вашей задачи это все несущественно и влияние минимально - используйте на здоровье.

В конце концов, время программистов стоит дороже компьютерного железа.

Переоптимизация не всегда стоит свеч.
Ответ написан
Комментировать
@nirvimel
Создание временного объекта допустимо (по соображениям производительности), если класс этого объекта удовлетворяет нескольким условиям.
Временный класс должен иметь только final поля (то есть никаких других полей кроме final он иметь не должен). И сам экземпляр этого класса (если не передается напрямую) должен храниться в final локальной переменной. Если это условие соблюдено (есть еще незначительные условия), то включается крутейшая оптимизация (кажется, начиная с Java 7, но точно не помню), которая на выходе дает код, практически эквивалентный тому, как если бы все поля этого класса передавались бы в функцию через параметры (никакой объект класса при этом не создается).
Дополнительное условие, требуемое для включения этой оптимизации - код во всех его методах (включая конструктор) не должен вызывать сторонних эффектов (не обращаться к внешним классам, не вызывать new, и др.). Без опыта написания чистых функций проще всего соблюсти это ограничение, если вообще не создавать никаких методов, кроме конструктора, который только инициализирует поля значениями своих параметров.
Еще одно условие - этот класс должен быть унаследован только от Object и должен запрещать наследование от себя (то есть сам должен быть final).

Кстати, в последних версиях версиях Java (7/8) вообще много разных оптимизаций для тех, кто пишет final по умолчанию везде, и убирает только когда это совершенно необходимо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Noortvel
Нет, не нормально. И почему вы взяли, что экземпляр точки не куда не записан? Он как бы в SomeClass сидит.
public class Someclass{
    private Point point;
    public void CreateObj(Point point){
        this.point = point;//ссылка на поинт, злой сборщик не придет.
}
}
Ответ написан
@raspier
Java Developer
Всё очень просто. Если вам нужен этот экземпляр кто-то ещё, то запишите его в переменную, вот и всё.
Вообще, IDEA даже "обесцветит" это переменную, если она у вас нигде не используется. Так что
double x = 1.0, double y = 1.0, double z = 1.0;
Point point = new Point(x, y, z);
SomeClass.createObject(point);

Или уже идите до конца))
SomeClass.createObject(new Point(1.0, 1.0, 1.0));
А то для координат создали переменные, а для экземпляра не хотите.
Ответ написан
Комментировать
DrNefario
@DrNefario
Пришел, увидел, решил!
Ну...

Если говорить насчет производительности, то тут уже зависит все от ограничений вашей системы. Могёт или не могёт - вам решать.

Если говорить по поводу "принципа наименьшего удивления", то могу сказать, что вы меня удивили.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы