Потокобезопасность WeakReference

Несколько человек отправили об инициализаторах экземпляра, вот хорошее использование для него:

Map map = new HashMap() {{
    put("a key", "a value");
    put("another key", "another value");
}};

быстрый способ инициализировать карты, если Вы просто делаете что-то быстрое и простое.

Или использование его для создания быстрого колебания структурируют прототип:

JFrame frame = new JFrame();

JPanel panel = new JPanel(); 

panel.add( new JLabel("Hey there"){{ 
    setBackground(Color.black);
    setForeground( Color.white);
}});

panel.add( new JButton("Ok"){{
    addActionListener( new ActionListener(){
        public void actionPerformed( ActionEvent ae ){
            System.out.println("Button pushed");
        }
     });
 }});


 frame.add( panel );

, Конечно, этим можно злоупотребить:

    JFrame frame = new JFrame(){{
         add( new JPanel(){{
               add( new JLabel("Hey there"){{ 
                    setBackground(Color.black);
                    setForeground( Color.white);
                }});

                add( new JButton("Ok"){{
                    addActionListener( new ActionListener(){
                        public void actionPerformed( ActionEvent ae ){
                            System.out.println("Button pushed");
                        }
                     });
                 }});
        }});
    }};
15
задан MatthewMartin 17 October 2012 в 21:43
поделиться

2 ответа

Просто возьмите Target и проверьте, не является ли он нулевым:

object target = myWeakReference.Target;
if (target != null)
{        
    ((MyType)target).Foo();
}

В документах для IsAlive конкретно говорится:

Потому что объект потенциально может быть утилизировано для вывоза мусора сразу после свойства IsAlive возвращает истину, использование этого свойства не рекомендуется, если вы не тестируете только для ложного возвращаемого значения.

25
ответ дан 1 December 2019 в 02:02
поделиться

Вы не можете. Назначьте myWeakReference.Target переменной и проверьте значение null.

2
ответ дан 1 December 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: