2015-08-13 4 views
0

Когда мы должны дать метод вызывать JavaClass.class как параметр? Я часто вижу, что-то вроде следующего кода, но я не понимаю:Вызов метода имеет .class как параметр?

String foo(Baar bar) { ... } 

foo(Baar.class) 
+2

Это не синтаксически правильно. Пожалуйста, укажите конкретный/реальный пример. –

+0

Вкратце метод принятия класса < T > как аргумент хочет информацию о типе вместо экземпляра типа T –

ответ

0

В java вы можете объявить методы ожидать аргументов типа Class. Что-то вроде

String foo(Class<Baar> bar) { ... } 

способ вызова метода является:

Baar bar = new Baar(); 
foo(bar.getClass()); 

Или что-то вроде

foo(Bar.class); 

Параметр класса типа можно использовать с помощью функции foo() по различным причинам: он может создать новый объект того же типа, используя

String foo(Class<Baar> bar) { 
    Baar barInstance = bar.newInstance(); 
} 

Он также может использовать его в блоке if-then-else для выполнения определенных действий в зависимости от типа класса.

String foo(Class<?> bar) { 
    if (bar == Baar.class) { 
    System.out.println("Baar type received."); 
    } 
} 

Обратите внимание, что подпись метода функции, ожидающая объекта класса, должна явно сказать это. В противном случае это приведет к ошибке времени компиляции; как в вашем случае. В вашем случае функция foo ожидает объект Baar. Вы не можете передать ему ссылку на Baar.class.

1

Когда метод ожидает Class в качестве аргумента.

Например, EnumSet.allOf(Class<E> elementType) ожидает, что перечисление учащихся (а не перечисление экземпляра) в качестве аргумента. Таким образом, если предположить, Season это перечисление, вы называете его, используя

EnumSet.allOf(Season.class) 

В вашем примере, нет никакого способа, вы можете передать Baar.class в качестве аргумента foo(), потому что foo() ожидает Baar экземпляра в качестве аргумента. Итак, что вам нужно, это что-то вроде

Baar baar = new Baar(); 
foo(baar); 
+0

спасибо :) теперь я понимаю –

Смежные вопросы