Встроенный класс Java, вызывающий метод в родительском классе - PullRequest
0 голосов
/ 21 ноября 2010

Я работаю над небольшим приложением Swing и мне нужна помощь.У меня есть встроенный класс для MouseListener, и внутри одного из методов, которые я хотел бы вызвать метод в родительском классе, однако this является экземпляром MouseListener.быть оцененным.

Ответы [ 3 ]

3 голосов
/ 21 ноября 2010

Несмотря на то, что this является экземпляром анонимного типа, вы все равно должны иметь возможность вызывать methodX("str") - просто не используйте префикс this.

Если вы хотите быть явным, я думаю, что - это некоторый синтаксис, который позволяет вам это делать - вы можете написать

ParentClass.this.methodX("str");

но лично я не стал бы беспокоиться о том, чтобы быть явным, если вам действительно не нужно (например, для устранения неоднозначности вызова из метода в MouseListener).

1 голос
/ 21 ноября 2010

Вам не нужно ничего делать, кроме как удалить this из звонка.

Если вы все еще хотите использовать this, вы должны иметь префикс ParentClass. Например. ParentClass.this.methodX(...) ... Но это просто уродливо и должно использоваться при необходимости (называть коллизии и т. Д.).

0 голосов
/ 22 ноября 2010

Как уже говорили другие, просто удалите this., и вы сможете вызывать метод во внешнем классе. В тех редких случаях, когда внешний класс и вложенный класс имеют методы с тем же именем и списком параметров, вы вызываете его с помощью OuterClass.this.someMehtod(...);.

Для более чистого кода при написании анонимных внутренних классов я советую вам использовать адаптеры. Для многих интерфейсов Swings есть абстрактные адаптеры, реализующие их, и вы переопределяете только интересующие вас методы. В этом случае это будет MouseAdapter:

class ParentClass
{
    void ParentMethod()
    {
        swing_obj.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                someMethodX();
            }
        });
    }

    void methodX(String x)
    {
        //...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...