Как передать анонимный класс (не экземпляр) в качестве параметра методу, ожидающему тип Java в Java - PullRequest
3 голосов
/ 05 февраля 2011

Мне нужно вызвать метод, который принимает параметр Class:

public action(Class<? extends SomeInterface> classVariable);

Я могу сделать это:

action(new SomeInterface() { 
    // implement interface
  }.getClass());

Но могу ли я уйти без создания экземпляраобъект и вызов getClass()?

Ответы [ 4 ]

5 голосов
/ 05 февраля 2011

Как бы вы получили доступ к анонимному классу без экземпляра? Вам потребуется имя , чтобы как-то ссылаться на него, которого у него по определению нет (конечно, у него будет какое-то имя, сгенерированное компилятором во время выполнения, но для запроса, что вам нужно сначала создать это, и вы не можете создать это, не создавая его).

Так что нет способа достичь того, что вы хотите.

0 голосов
/ 05 февраля 2011

Может быть, вы ищете это?

action(SomeInterface.class);

Я думаю, это может быть то, что вы ищете, но это совсем не относится к анонимным занятиям.

Может быть полезно узнать больше о том, что метод action делает со ссылкой на класс.

0 голосов
/ 05 февраля 2011

Анонимные классы нельзя безопасно ссылаться только по имени, но по экземпляру. Вы можете предсказать название и использовать его, но оно не изящно и не надежно.

private void neverCalled() {
    SomeInterface si = new SomeInterface() { 
        // implement interface
    };
}

Class anon = Class.forName(getClass()+"$1"); // hopefully its the first!

Гораздо проще дать классу имя и использовать его. Многие IDE позволяют вам легко менять одно на другое.

0 голосов
/ 05 февраля 2011

Вы должны быть в состоянии сделать следующее:

public void action(Class<? extends SomeInterface> classVariable);

затем позвоните:

action(new SomeInterface() { // implement interface }.getClass());

Пример кода:

interface I {}

class A implements I
{    
}

public void action(Class<? extends I> c)
{
}


public void test()
{
   action(new I() {}.getClass());
}
...