2015-10-21 4 views
2

Я хочу создать параметризованным класс в Java, какJava. Может ли массив быть общим параметром?

class MyClass<T> 

Первый вопрос: Может ли T быть типа Byte []?

Второй вопрос: Если да, то как знать, что я знаю, что это массив типа Byte? Обычно я получаю класс, а затем проверяю тип класса.

Class typeT = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 
anInstance.getClass().equals(typeT) 

Но как это работает, если это массив?

Спасибо заранее

Altober

+1

Он должен работать так, как ожидалось, поскольку массивы - это просто объекты с синтаксическим сахаром в Java (afaik). –

+0

Хорошо, спасибо большое и второй вопрос? – Altober

+0

вы можете попробовать первое, что вам нужно. Во-вторых, это скорее должно быть передано с помощью общих методов получения и установки. Если вам нужно проверить тип вашего массива, потому что вы храните их в списке объектов, например, у вас скорее есть недостатки дизайна. – SomeJavaGuy

ответ

0

Пожалуйста, имейте в виду, что java.util.ArrayList<Byte> будет служить той же цели с минимальными накладными расходами для хранения по сравнению с Byte[], со всеми операциями для массивов, доступных и многое другое, не говоря уже о динамическое изменение размера.


Если же вы должны использования Byte[]:

Если MyClass<T> сама коллекция, или вы можете вернуть один экземпляр T то самый быстрый способ, чтобы проверить тип этого экземпляра:

list.get(0).getClass().getCanonicalName(); 

java.lang.Byte[].

Также Class<T>, который положительно проверяет массив (возвращает true от Class.isArray()), вернет тип компонента массива. Другими словами, следующий код:

list.get(0).getClass().getComponentType(); 

возвращает java.lang.Byte.

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