2010-03-20 4 views
39

(Да, я знаю, что я могу называть Java-код Scala, но это бессмысленно, я хочу УДАЛИТЬ код Java, а не держать его вокруг и смотреть на него и поддерживать его навсегда!)Автоматическое преобразование исходного кода Java в Scala?

Есть ли какие-либо утилиты для преобразования источника Java в источник Scala?

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

Я нашел это, но это, кажется, неактивные, вероятно, багги/неполный ... http://sourceforge.net/projects/java2scala/

Есть альтернативы?

+5

Я бы несколько опасался автоматического преобразования, даже если он существует. Одним из самых больших преимуществ Scala является способность выражать свои проблемы с кодированием более компактным и понятным способом. Автоматическое преобразование выражает решение в стиле Java в синтаксисе Scala. –

+0

@Rex Kerr - +1, и вы должны повернуть свой комментарий в ответ. Идиомы Scala настолько сильно отличаются от Java, что даже хорошо написанный Java-код превратится в плохо написанный Scala-код. – kdgregory

+0

@Alex R - Я не знаю, сколько кода Java у вас есть, но если это всего несколько тысяч классов, вам будет лучше конвертировать его вручную. Вы должны иметь возможность действовать по частям, заменяя один набор классов за раз. И вы почти наверняка узнаете что-то о Java и Scala в этом процессе. – kdgregory

ответ

34

IntelliJ kinda, sorta, делает. Вам нужно открыть проект с помощью источников Java. Затем вы можете копировать/вставлять выражения, методы или целые классы в файл .scala. Это преобразуется в эквивалентный код Scala.

Превосходность конверсии не идеальна, и по этой причине она еще не поддерживает массовое преобразование.

Я рекомендую использовать последнюю версию IntelliJ и Scala Plugin. Community Edition является бесплатным.

Помимо этого, Пол Филлипс однажды начал Scalify проект, чтобы перевести код из Java в Scala (или, возможно, ваш любимый язык), и даже улучшить его в процессе! Он объясняет концепцию в этом video. Однако это усилие заглохло, по-видимому, потому, что он обратил свое внимание на непосредственный вклад в компилятор Scala и стандартную библиотеку.

+10

Отлично. Я попробую IntelliJ в ближайшее время. Я не могу поверить, что есть люди, которые думают, что даже тривиальные вещи, такие как конвертирование угловых скобок в квадратные скобки и перемещение деклараций типа на другую сторону «:», должны выполняться вручную! Они не должны быть серьезными :-) –

+2

Awesome. Очень рад этой функции IntelliJ. – laher

+2

Это доступная вилка проекта Scalify от Paul Phillips (кажется, больше не поддерживается): https://github.com/mbana/scalify Также есть http://javatoscala.com. –

2

Я не думаю, что можно автоматически преобразовать Java в Scala в общем случае. Многие из конструкций нижнего уровня в Java не существуют в Scala (например, поля и статические члены), Scala помещает ограничения на конструкторы, которые не существуют в Java, и у Scala нет таких типов, как Java (generics без общие параметры).

+2

Поля и статические элементы существуют. Вы можете легко создать объект, если столкнулись с статическим полем и т. Д. Для генериков без указанного параметра вы всегда можете использовать Any в Scala. Абсолютно возможно (если не тривиально) преобразовать Java в Scala. Тем более, что оба языка работают на JVM, у вас нет никаких проблем, поскольку вы можете даже позвонить в стандартную библиотеку Java. И оба языка статически типизированы. В заключение, если вы хотите конвертировать язык A в B, то Java для Scala - один из самых простых случаев, который вы могли бы выбрать. –

+4

Есть «логические эквиваленты», но они ни в коем случае не совпадают, поэтому перевод становится приблизительным. Наивный перевод может работать для тривиальных примеров, но будет разбит на сложный код. –

+0

Кажется, что наоборот (Scala to Java) невозможно http://stackoverflow.com/q/9880805/243233 – Jus12

6

http://code.google.com/p/jatran/

(я не использовал это)


заметил это, март 2012: http://blog.mysema.com/2012/03/scalagen-java-to-scala-conversion.html

+0

Я только что перешел по ссылке, и проект пуст, нет файлов, нет страниц вики, нет активности :-( –

+0

@Hugh: Следующие работали для меня: 1) проверьте код (http://code.google.com/p/jatran/source/checkout), 2) ant, 3) ./jatran.sh - input SomeClass.java –

24

В IntelliJ IDEA Theres является рефакторинг под названием "Преобразовать в Scala". Он находится в меню Refactor (после установки плагина Scala) Ctrl + Shift + G. Так что вам не нужно играть с копией/вставкой.

Просто убедитесь, что у вас открыт Java-файл, эта опция отсутствует, если это scala или другой файл.

+0

Я не вижу эту опцию в IDEA 10.5. 1 с плагином Scala 0.4.1338. –

+1

Выберите любой класс java или откройте его в редакторе, и этот пункт меню должен появиться (проверен в IDEA 10.5.1) –

+0

Я также не использую этот вариант с 11.1 общинной версией и плагином Scala 0.5.808. – devth

14

Я только что опубликовал следующий инструмент: Scalagen. Я тоже попробовал Jatran, но был разочарован некоторыми ошибками и сложной интеграцией. Scalagen расширяемый и поставляется с плагином Maven.

+1

Это выглядит аккуратно, но есть ли способ запустить его в проекте, который не использует Maven? –

+0

Вы можете запускать scala-код, конечно, напрямую, плагин Maven - это всего лишь тонкая обертка. –

+0

Глядя на ваш класс mojo, вы используете 'Converter.instance(). Convert (in, out);'. Я не вижу в вашем коде основной проводки. Запустив код scala непосредственно, вы имеете в виду кодирование чего-то, чтобы конкретно преобразовать мой проект или есть встроенный способ сделать это? –

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