Вызов статического метода для параметризованного класса в Java - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть список классов, которые расширяют тот же суперкласс, который имеет статическое поле с именем foo:

List<Class<? extends SuperClass>> list;

как я могу получить доступ к foo для элемента этого списка?

Ответы [ 5 ]

4 голосов
/ 15 февраля 2012

Зачем

Superclass.foo

не работает? Поскольку он статический, ваш List совершенно не имеет значения. А также дочерние классы, поскольку поле существует ровно один раз в Superclass.

3 голосов
/ 15 февраля 2012

Вы можете получить доступ к статическому полю foo в суперклассе через имя класса:

 SuperClass.foo

Статическое поле имеет одно значение для всех экземпляров и всех подклассов.

1 голос
/ 15 февраля 2012

Имя класса и его статический член:

SuperClass.foo
0 голосов
/ 31 января 2014

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

Скажем, у вас есть класс Foo, который имеет статический методбар, который возвращает строку.Вы можете сделать это:

String test = Foo.bar();

, но вы не можете сделать это:

String test = Foo.class.bar();

То, что у вас есть в вашем примере, будет больше похоже на это:

Class<? extends SuperClass> classz = Foo.class;
String test = classz.bar(); // same as Foo.class.bar();

Решение: Вы должны иметь возможность использовать отражение в этой точке для вызова метода:

String test = (String) Foo.class.getMethod("bar").invoke(null);
0 голосов
/ 15 февраля 2012

Вы можете сделать foo защищенным, чтобы получить к нему доступ в подклассе.

...