2014-10-06 3 views
13

Кто-нибудь знает лучший способ, чтобы написать следующее заявление:Как получить класс, связанный с типом массива?

example.mySpecialMethod(new MySpecialClass[0].getClass()) 

Мне нужен тип массива, но я не знаю, если есть лучшее решение. На данный момент этот пример работает для меня, но, возможно, кто-то знает лучший способ сделать то же самое без ключевого слова new.

+1

Почему не 'MySpecialClass.class'? Если 'mySpecialMethod()' принимает параметр 'Class' как параметр, то нет смысла создавать экземпляр массива. –

+0

Метод ожидает «Класс c 'as param – user3280180

+0

Я вижу, мой плохой. –

ответ

17

Класс new MySpecialClass[0] является MySpecialClass[].class, так что вы можете использовать:

example.mySpecialMethod(MySpecialClass[].class) 
+0

Просто из любопытства, что было бы лучшим решением, если бы ваш тип компонента не был известен во время компиляции? Я не могу придумать лучшего способа, чем 'java.lang.reflect.Array.newInstance (componentClass, 0) .getClass()' – biziclop

+0

@biziclop мой код эквивалентен оригиналу. Но если вам нужен фактический класс какого-либо объекта, вам нужна ссылка на этот объект. – assylias

+0

Я знаю, это просто пришло мне в голову в полной мере. Учитывая объект класса массива, вы можете просто вызвать 'getComponentType()', чтобы получить класс компонента. Но обратное представляется гораздо более сложным. – biziclop