2011-12-27 2 views
1
Class<?> clazz = loadClass("Test"); 
Method printSomething = clazz.getDeclaredMethod("printSomething"); 
printSomething.invoke(clazz); 

Я пытаюсь выяснить, как это сделать в Скале. Я предполагаю, что я пропустил что-то простое с тем, как Scala обрабатывает отражение.Отражение в scala. Вызывать метод?

val clazz = loadClass("Test") 
val printSomething = clazz.getDeclaredMethod("printSomething") 

printSomething.invoke(clazz) 

Мой главный вопрос: Является ли Any объектом такой же, как Class<?> в Java?

+0

Ваш код не является полным, чтобы рассказать, что здесь происходит - где, например, происходит «рендеринг». –

+3

Что случилось с кодом Scala, который вы отправили, если что-нибудь? –

+0

Исправлен код. Ну, я более или менее спрашиваю, что делает класс в Scala? Благодарю. –

ответ

4

Any не то же самое, что Class<?> в Java.

Тип Any является альтернативой Scala для Java Object с расширениями: в отличие от Java Object это супертип буквально все в Scala, включая примитивы.

Class[_] (сокращенно Class[Any]) имеет тот же тип, как в Java Class<?>, а именно это путь в Java Class<?> представлен в Scala. Экземпляры типа Class в Scala, как и в Java, обеспечивают основные возможности отражения по типу, предоставленному в качестве его общего параметра. То есть экземпляр Class[Something] предоставляет стандартный API отражения Java по классу Something. Вы можете использовать его так же, как и в Java. Чтобы получить этот экземпляр, вы вызываете стандартный метод classOf[Something] или instanceOfSomething.getClass.

Расширенные возможности отражения, предназначенные главным образом для решения проблемы стирания типа, поставляются с Scala 2.10, довольно стабильными версиями моментальных снимков, которые вы всегда можете скачать. Этот расширенный API предоставляется через объект scala.reflect.runtime.Mirror. В Интернете пока мало документации, но вы можете найти приличную информацию здесь, в StackOverflow.

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