Создание общего параметризованного типа чего-либо - PullRequest
0 голосов
/ 06 декабря 2009

Итак, я пытаюсь создать параметризованный тип, который будет работать для любого типа в Java, включая все, что является объектом, а также типы примитивов. Как мне это сделать?

Хорошо, предположим, что я хочу, чтобы цель для каждого была примитивом, поэтому ее

для (int i: MyClass)

что-то в этом роде. Возможно ли это сделать?

Ответы [ 5 ]

4 голосов
/ 06 декабря 2009

Исходя из вашего комментария к ответу Божо, вы, вероятно, хотите что-то вроде этого:

interface MyInterface<T> extends Iterable<T> {
}

и нет, вы не можете сделать это для примитивных типов. Вы можете смоделировать итератор для примитивного типа, но он никогда не будет итеративным, как, например, в цикле for-each.

2 голосов
/ 06 декабря 2009

Я могу что-то упустить, но почему бы вам просто не реализовать Iterable<T>?

1 голос
/ 06 декабря 2009

Вы не можете делать такие вещи, с пользой, для примитивных типов. Если вам «повезло», вы получаете злой автобокс, а если вам не повезет, вы можете получить протесты от компилятора. Если вы посмотрите на GNU Trove или Apache Commons Primitives, вы увидите параллельный юниверс, который возникает из-за желания сделать эквивалент каркаса коллекций для примитивных типов.

Полагаю, если вы уверены, что накладные расходы на автобокс приемлемы для вас, это может иметь смысл, но я не могу смириться с моей тенденцией находить это отвратительным.

1 голос
/ 06 декабря 2009
public MyClass<E>

он не включает в себя примитивные типы, т.е. вы не можете объявить MyClass<int> myobj;, но вы можете использовать оболочки (java.lang.Integer и т. Д.)

0 голосов
/ 06 декабря 2009

Это должно сработать, но я подозреваю, что это не то, что вы действительно после ...

final List< Integer> list;

...

for(final int i : list)
{
}
...