Мне кажется, я полностью понимаю вашу проблему мышления, в основном потому, что у меня есть точная противоположность ее:)
Я бы предложил создать своего рода переход парадигмы с C ++ на Java, чтобы позволить вам писать больше реального кода вместо управления самими объектами.
Чтобы привести конкретный пример, я бы предположил, что в C ++ есть определенные вещи, которые вы делаете в начале и в конце жизненного цикла объекта, что означает, что вы, скорее всего, должны обернуть их в свои собственные методы ( не конструкторы / деструкторы, имейте в виду! ) и сначала "обучайте" себя использовать их явно в C ++. Затем, когда вы переходите на Java, вы можете довольно легко перейти по аналогии с этим методом к другим привычкам программирования, и вместо того, чтобы царапать голову деструкторами и еще чем-то, просто реализуйте эти методы, оставив их пустыми. Таким образом, у вас есть не столь невидимый ментальный маркер для себя , который жизненный цикл объекта подходит к концу, и в конце концов, когда вы научитесь доверять этому, вы можете удалить его. Вам даже не нужно беспокоиться о накладных расходах, JVM будет оптимизировать эти избыточные вызовы методов в любом случае, пока тело метода пусто.
Следующий шаг этого, конечно же, состоит в том, чтобы распространить его на примитивные значения и перейти от жизненного цикла объекта к уровню детализации метода. Чтобы действительно сконцентрироваться на том, что я имею в виду, вот пример класса с этими умственными помощниками:
public class MentalHelpers {
private MyFieldObject mfo;
/**
* Note the separate method for object creation.
* This is actually good practice in general!
*/
public MentalHelpers() {
createObject();
}
private final void createObject() {
mfo = new MyFieldObject();
}
private final void destroyObject() {
// Do nothing! private or public, you decide.
}
public int incrementOne() {
int i = 1;
int ret = i++;
freeInt(i);
return ret;
}
private final freeInt(int i) {
// Once again, do nothing!
}
}
Вот и все, надеюсь, это полезно.