Мне нужно вызвать метод, который принимает параметр Class:
Class
public action(Class<? extends SomeInterface> classVariable);
Я могу сделать это:
action(new SomeInterface() { // implement interface }.getClass());
Но могу ли я уйти без создания экземпляраобъект и вызов getClass()?
getClass()
Как бы вы получили доступ к анонимному классу без экземпляра? Вам потребуется имя , чтобы как-то ссылаться на него, которого у него по определению нет (конечно, у него будет какое-то имя, сгенерированное компилятором во время выполнения, но для запроса, что вам нужно сначала создать это, и вы не можете создать это, не создавая его).
Так что нет способа достичь того, что вы хотите.
Может быть, вы ищете это?
action(SomeInterface.class);
Я думаю, это может быть то, что вы ищете, но это совсем не относится к анонимным занятиям.
Может быть полезно узнать больше о том, что метод action делает со ссылкой на класс.
action
Анонимные классы нельзя безопасно ссылаться только по имени, но по экземпляру. Вы можете предсказать название и использовать его, но оно не изящно и не надежно.
private void neverCalled() { SomeInterface si = new SomeInterface() { // implement interface }; } Class anon = Class.forName(getClass()+"$1"); // hopefully its the first!
Гораздо проще дать классу имя и использовать его. Многие IDE позволяют вам легко менять одно на другое.
Вы должны быть в состоянии сделать следующее:
public void action(Class<? extends SomeInterface> classVariable);
затем позвоните:
Пример кода:
interface I {} class A implements I { } public void action(Class<? extends I> c) { } public void test() { action(new I() {}.getClass()); }