LINUX.ORG.RU

Что делать, когда в Java нужны указатели?


0

2

Сабж. Не знаю, спрашивал ли уже. Что делать, когда в Java нужны указатели? Например, указатель на Boolean.

Сейчас я исползую что-то вроде:

public class PointerToObject<T>
{
private T target;

public PointerToObject(T target) {
this.target = target;
}

public T getTarget()
{
return target;
}

public void setTarget(T target)
{
this.target = target;
}

public void clear() {
this.target = null;
}
}

Недавно заметил, что техлид зарезал мой костыль с вот таким комментарием:

//FIXME Consider using AtomicInteger/List<Integer>/whatever instead.
/**
 * @deprecated
 */

Что вы по этому поводу думаете? Имхо, List<Integer> хоть и можно заставить выполнять эту работу, но при этом семантически List и Pointer — вещи не совпадающие. А использовать вещь не по назначению — плохо.

Как сделать это более кошерно? Может, для этого есть какие-то специальные фреймворки? :) (заюзать какой-нибудь фреймворк для этого, а перед техлидом аппелировать к авторитетности авторов сего поделия)

Спасибо

★★★★☆

Это толксы.

Deleted
()
Ответ на: комментарий от Zenom
final Integer x = 3;

x = 9; //no way!

final PointerToInteger x = new PointerToInteger(3);

x.setValue(9) //way

вкратце, в нашем веб-фреймворке принято как можно больше прятать в анонимные классы и сериализовывать всё, что движется. Поэтому для работы с общим состоянием нужно много final'ов.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от Deleted

> Сначала создаём себе проблемы… это, похоже, про вас :)

веб-фреймворк писали не мы, точно так же как не изобретали coding style. Мы просто поддерживаем то, что уже есть.

stevejobs ★★★★☆
() автор топика

>Сабж. Не знаю, спрашивал ли уже. Что делать, когда в Java нужны указатели?

Надо еще раз подумать над структурой программы. Надобность указателей в JAva это очень прозрачный намек на кривость концепта :)

dikiy ★★☆☆☆
()
Ответ на: комментарий от stevejobs

Не могу представить ситуацию, в которой мне или другому гетеросексуалу понадобится такая срань.

Zenom ★★★
()

с с объектами - это уже не с.[br] java с указателями - это уже не java.

mi_estas
()
Ответ на: комментарий от stevejobs

Спасибо, КЭП, догадайся, как это стало «не толкс»? как оно изначально в толкс попало - вот вопрос.

mono ★★★★★
()
Ответ на: комментарий от stevejobs

Чудеса... Либо я идиот, либо в этом мире что-то не так.

mono ★★★★★
()
Ответ на: комментарий от stevejobs

Ну можешь AtomicReference заюзать. А что у вас там в анонимных классах, если не секрет? Тебе жабка как бы не зря из анонимного класса к не-final переменной не дает доступа. А то ты ссылку куда-нить отправишь куда не надо, например в другой тред.

dizza ★★★★★
()
Ответ на: комментарий от dizza

> Ну можешь AtomicReference заюзать.

ОК, так и сделаю.
Не то, чтобы мне это очень нравилось, но хоть что-то ;)

А что у вас там в анонимных классах, если не секрет? Тебе жабка как бы не зря из анонимного класса к не-final переменной не дает доступа.


в анонимных классах — элементы страницы (виджеты всякие, лиснеры). Как в свинге же, ну. Причем веб-фреймворк при перезагрузке кладет их в кэш (иногда сериализует, а иногда просто перекидывает туда reference). Приходится постоянно думать, куда, что, зачем, как и почему восстановилось (или еще не восстановилось, или воостановится когда-нибудь, или попытается но не проканает).

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Кстати, еще вспомнил: из анонимного класса можно обращаться к полям внешнего объекта, типа так:

public class Foo {

    private int x = 10;

    public void foo() {
        Runnable r = new Runnable() {
            public void run() {
                int y = x + 1;
                x = y;
            }
        };
    }
}
dizza ★★★★★
()

>Что вы по этому поводу думаете?

Пока писал на Си/Си++ — всё делал на указателях. Как стал на Java писать — ни разу даже ничего близкого к указателями не потребовалось. Разные языки диктуют разный стиль.

KRoN73 ★★★★★
()
Ответ на: комментарий от elverion

Не, не то. Значение final ссылки ты поменять не можешь.

dizza ★★★★★
()
void code ()
{
  int[] v = {5};
  fn (v);
}

void fn (int[] v)
{
  assert v != null && v.length == 1;
  
  v[0] *= 2;
}

Мегакостыльно, не очень очевидно, но тоже вариант.

note173 ★★★★★
()

> Что делать, когда в Java нужны указатели?

Обратиться к психологу.

cipher ★★★★★
()
Ответ на: комментарий от stevejobs

>Мы просто поддерживаем то, что уже есть.

Так, может, убрать у того Integer'а слово final?

proud_anon ★★★★★
()

В какой-то, кажется, Апачевской библиотеке видел набор *Holder'ов. Был там и IntHolder. Погугли не по слову «указатель», а «java mutable int», «java int holder», etc.

Ian ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.