Мне нужно было преобразовать приложение Java 1.5se в С# 2.0.
Кто-нибудь знает инструмент (предпочтительно свободный/открытый источник) для этого?
Мне нужно было преобразовать приложение Java 1.5se в С# 2.0.
Кто-нибудь знает инструмент (предпочтительно свободный/открытый источник) для этого?
Ассистент преобразования языка Java. Необязательно устанавливается с (по крайней мере) Visual Studio 2005 Standard Edition.
Выберите "File/Open/Convert/Java Language Conversion Assistant".
Не забудьте вручную перейти через код. У него будет много проблем.
Даже если есть такой инструмент, я настоятельно рекомендую вам выполнить преобразование вручную. Автоматические преобразователи часто точно воспроизводят код, но игнорируют идиомы - потому что им действительно будет очень трудно получить право.
Кроме того, различия между генериками в .NET и Java могут привести к очень различным решениям в двух кодовых файлах.
Действительно, вам будет лучше делать это вручную.
Хороший инструмент для использования называется Sharpen, который является открытым исходным кодом.
Этот инструмент был разветвлен и обновлен командой Xamarin, и они использовали его для перевода API-интерфейсов Android на С#. Их копию можно найти здесь:
ikvm предоставляет классы Java в .NET. Это не конвертер, но, основываясь на моем опыте, я бы рекомендовал его любому, кто перешел с java на .NET.
В то время как синтаксис двух языков кажется похожим, семантика сильно отличается. Чтобы упомянуть несколько мест, оба языка сбились с пути
Другими словами, вы не сможете сделать такой переход автоматически. Если причиной перехода на С# является возможность перевода кода в файл .exe, на рынке Java существуют различные варианты.
Сейчас я тестирую Tangible Solution (это не бесплатно)
И он добавит помощника класса. Но вне его результат выглядит отлично.
Java: (оригинал)
public class PackVariableArrays {
private ClassError myerror=new ClassError();
public VariableArrays unpack(String txt) {
VariableArrays pc = new VariableArrays();
Variable lc;
txt=txt.replace("\r\n","\n");
setMyerror(new ClassError());
if (txt==null) {
lc=new Variable();
lc.name="ERV-5: Empty values";
pc.addItem(lc);
return pc;
}
String[] linecode = txt.split(ClassUtil.SEPARATOR2);
int blen = 0;
int tmpint = 0;
int numelement = 9999;
С# (преобразование)
public class PackVariableArrays {
private ClassError myerror =new ClassError();
public virtual VariableArrays unpack(string txt) {
VariableArrays pc = new VariableArrays();
Variable lc;
txt=txt.Replace("\r\n","\n");
Myerror = new ClassError();
if (txt==null) {
lc=new Variable();
lc.name="ERV-5: Empty values";
pc.addItem(lc);
return pc;
}
string[] linecode = StringHelperClass.StringSplit(txt, ClassUtil.SEPARATOR2, true);
int blen = 0;
int tmpint = 0;
int numelement = 9999;
Это простой случай, но он отлично работает. Однако, как я сказал раньше, он использует помощник класса (StringHelperClass.StringSplit), который хорош, но он не нужен. Вне этого, код результата довольно ясен.
Microsoft использовала свой собственный конвертер Java в С# - Microsoft Java Language Conversion Assistant 3.0
Вы пробовали XMLVM? У него есть возможность автоматически конвертировать в С#, как это:
xmlvm --in=myjar.jar --out=output_dir --target=csharp
Недавно Xamarin портировал андроид на моно, используя sharpen. Проверьте эту ссылку.