Есть ли не стертое расширение типа дженериков для компилятора Java, доступное как расширение компилятора стороннего производителя? - PullRequest
2 голосов
/ 24 мая 2010

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

Chris

Ответы [ 4 ]

5 голосов
/ 24 мая 2010

Требуется не просто изменение компилятора.Я думаю, что было бы также необходимо изменить реализацию JVM способами, несовместимыми со спецификацией JVM, и библиотеками классов Java способами, которые несовместимы с текущими API.

Например, семантикаcheckcast инструкция значительно изменяется, как и объекты, возвращаемые операцией Object.getClass ().

Короче говоря, конечный результат больше не будет "Java" и будет мало интересен для обширногобольшинство разработчиков Java.И любой код, разработанный с использованием новых инструментов / JVM / библиотек, будет испорчен.

Теперь, если бы Sun / Oracle предложила / внесла это изменение ... , это было бы интересно.

1 голос
/ 25 мая 2010

Scala (язык, который работает поверх JVM) может позволить вам обойти проблему стирания типов, используя мощную концепцию манифестов , которая, по сути, дает вам овеществленных типов .

Дополнительная информация: http://www.scala -blogs.org / 2008/10 / manifest-reified-types.html

0 голосов
/ 25 мая 2010

Это было бы выполнимо, но я пока не знаю никого, кто это сделал.Это потребовало бы значительного переписывания javac, чтобы заставить его создавать экземпляры generics при необходимости (создание нового файла .class для каждого экземпляра), но в остальном должно быть достаточно простым.Можно даже добавить поддержку использования примитивных типов в качестве аргументов универсального типа.

0 голосов
/ 24 мая 2010

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

...