2010-03-20 25 views
39

(Evet ben Scala Java kodunu çağırabilir biliyorum; ama bu anlamsız, ben, Java kodunu SİL Etrafını tutmak ve ona bakmak ve sonsuza kadar korumak istiyorum!)Scala kaynak kodu dönüştürme için otomatik Java?

var olan var Java kaynağını Scala kaynağına dönüştürmek için oradaki yardımcı programlar var mı? Teorik olarak asgari bir kayıpla başarmanın mümkün olması gerektiğine inanıyorum.

Bunu bulduk ama ... http://sourceforge.net/projects/java2scala/

Herhangi alternatifleri eksik/muhtemelen arabası, inaktif görünüyor?

+5

Var olsa bile otomatik dönüşüm konusunda biraz dikkatli olurdum. Scala'nın en büyük avantajlarından biri, kodlama sorunlarınızı daha kompakt ve anlaşılabilir bir şekilde ifade etme yeteneğidir. Otomatik dönüştürme, Scala sözdiziminde Java stili bir çözüm ifade eder. –

+0

@Rex Kerr - +1, ve yorumunuzu bir cevap haline getirmelisiniz. Scala deyimleri, Java'dan çok iyi yazılmış Java kodlarının bile iyi yazılmamış Scala kodlarına dönüştüğü kadar farklıdır. – kdgregory

+0

@Alex R - Ne kadar Java kodunuz olduğunu bilmiyorum, ancak sadece birkaç bin sınıfsa, el ile dönüştürmekten daha iyi olacaksınız. Bir seferde bir grup dersi değiştirerek parça parça olarak ilerleyebilmeniz gerekir. Ve süreçte hem Java hem de Scala hakkında bir şeyler öğreneceksiniz. – kdgregory

cevap

34

IntelliJ kinda, sorta, bunu yapar. Java kaynaklarınızla bir proje açmanız gerekiyor. Daha sonra ifadeleri, yöntemleri veya tüm sınıfları bir .scala dosyasına kopyalayıp yapıştırabilirsiniz. Bu eşdeğer Scala koduna dönüştürür.

Dönüşümün aslına uygunluğu mükemmel değildir ve bu nedenle, henüz toplu bir dönüşümü desteklemez.

IntelliJ ve Scala Plugin'un en son sürümünü kullanmanızı öneririz. Topluluk Sürümü ücretsizdir. Bunun yanı sıra,

Paul Phillips kez Scala için Java kodunu çevirmek için Scalify projesini başlatan (veya potansiyel olarak favori dili) ve hatta süreç içinde onu geliştirmek! Konsept bu video'da açıklıyor. Ancak bu çaba durdu, çünkü dikkatini Scala derleyicisine ve standart kütüphaneye doğrudan katkıda bulundu.

+10

Mükemmel. Kısa bir süre sonra IntelliJ'u deneyeceğim. Açılı ayraçları köşeli parantezlere çevirmek ve tip beyannameleri ':' nin diğer tarafına taşımak gibi önemsiz şeyleri bile düşünen insanlar var diye düşünemiyorum! Onlar ciddi olmamalıdır :-) –

+2

Başar. Bu IntelliJ özelliği hakkında çok mutlu. – laher

+2

Bu, Paul Phillips'in Scalify projesinin mevcut bir çatalıdır (artık devam ettirilmiyor gibi görünmüyor): https://github.com/mbana/scalify Ayrıca, http://javatoscala.com var. –

2

Genel durumda Java'yı otomatik olarak Scala'ya dönüştürmenin mümkün olduğunu düşünmüyorum. Java'daki alt düzey yapıların çoğu Scala'da mevcut değildir (örneğin alanlar ve statik üyeler), Java'da bulunmayan yapıcılar için Scala yer kısıtlamaları ve Scala'nın Java gibi ham türleri yoktur (belirtilen genel parametreler).

+2

Alanlar ve statik üyeler var. Statik bir alanla karşılaşırsanız kolayca bir nesne oluşturabilirsiniz. Belirtilen parametresiz jenerikler için, Scala'da her zaman kullanabilirsiniz. Java'yı Scala'ya dönüştürmek kesinlikle mümkündür (önemsizse). Özellikle her iki dil de JVM'de çalıştığı için, Java standart kütüphanesine bile çağrı yapabildiğiniz için hiçbir özelliği yoktur. Ve her iki dil de statik olarak yazılmıştır. Sonuç olarak, eğer A dilini B'ye çevirmek isterseniz, o zaman Java'dan Scala'ya, seçebileceğiniz en kolay durumlardan biridir. –

+4

"Mantıksal eşdeğerler" vardır, ancak bunlar en az bit aynı değildir, bu nedenle çeviri yaklaşık olarak biter. Saf bir çeviri önemsiz örnekler için işe yarayabilir, ancak karmaşık kod için kırılacaktır. –

+0

Görünüşe göre (Scala'dan Java'ya) başka bir yol mümkün değil. Http://stackoverflow.com/q/9880805/243233 – Jus12

24

"Scala dönüştürme" adında bir üstlenmeden olduğunu. Refactor menüsü altında (Scala eklentisini yükledikten sonra) Ctrl + Shift + G. Yani kopyala/yapıştır ile oynamanıza gerek yok.

Yalnızca bir java dosyası açtığınızdan emin olun, bu seçenek bir scala veya başka bir dosyaysa, bu seçenek yoktur.

+0

Bu seçeneği IDEA 10.5'te göremiyorum. Scala eklentisi 0.4.1338 ile 1. –

+1

Herhangi bir java sınıfı seçin ya da editörde açın ve bu menü öğesi görünmelidir (IDEA 10.5.1'de test edilmiştir) –

+0

Ayrıca bu seçeneği 11.1 topluluk sürümü ve Scala eklentisi 0.5.808 ile de görmüyorum. – devth

14

Sadece şu aracı yayınladım: Scalagen. Jatran'ı da denedim, ancak bazı hatalar ve zorlu entegrasyonla uğraştım. Scalagen genişletilebilir ve bir Maven eklentisi ile birlikte gelir.

+1

Bu düzgün görünüyor, ancak Maven kullanmayan bir projede çalıştırmak için bir yolu var mı? –

+0

Kurs kodunu doğrudan kursta çalıştırabilirsiniz, Maven eklentisi sadece ince bir sarıcıdır. –

+0

Mojo sınıfınıza bakarak 'convert.instance(). Convert (in, out);'. Kodunuzda bunun etrafında bir ana koşum görmüyorum. Scala kodunu doğrudan çalıştırarak, projemi özel olarak dönüştürmek için bir şeyi kodlamak mı yoksa bunu yapmak için bir yol var mı? –

İlgili konular