Где я могу найти конвертер Java в С#? - программирование
Подтвердить что ты не робот

Где я могу найти конвертер Java в С#?

Мне нужно было преобразовать приложение Java 1.5se в С# 2.0.

Кто-нибудь знает инструмент (предпочтительно свободный/открытый источник) для этого?

4b9b3361

Ответ 1

Ассистент преобразования языка Java. Необязательно устанавливается с (по крайней мере) Visual Studio 2005 Standard Edition.

Выберите "File/Open/Convert/Java Language Conversion Assistant".

Не забудьте вручную перейти через код. У него будет много проблем.

Ответ 2

Даже если есть такой инструмент, я настоятельно рекомендую вам выполнить преобразование вручную. Автоматические преобразователи часто точно воспроизводят код, но игнорируют идиомы - потому что им действительно будет очень трудно получить право.

Кроме того, различия между генериками в .NET и Java могут привести к очень различным решениям в двух кодовых файлах.

Действительно, вам будет лучше делать это вручную.

Ответ 3

Хороший инструмент для использования называется Sharpen, который является открытым исходным кодом.

Этот инструмент был разветвлен и обновлен командой Xamarin, и они использовали его для перевода API-интерфейсов Android на С#. Их копию можно найти здесь:

Ответ 4

ikvm предоставляет классы Java в .NET. Это не конвертер, но, основываясь на моем опыте, я бы рекомендовал его любому, кто перешел с java на .NET.

Ответ 5

В то время как синтаксис двух языков кажется похожим, семантика сильно отличается. Чтобы упомянуть несколько мест, оба языка сбились с пути

  • Generics, Java компилирует все объекты, С# сохраняет общие типы
  • Исключения, Java проверяет исключения, С# не
  • Анонимные классы и внутренние классы, Java имеет анонимные классы и вложенные классы, у С# нет ни одного. Вместо этого у С# есть делегаты и события. Таким образом, модель программирования отличается от других.
  • делегаты, С# имеет понятие указателей функций, что приводит к другому способу программирования.
  • события, С# имеет представление о событиях и компонентах, которые приводят к другому способу программирования.
  • API, устанавливая все семантические различия в стороне, оба langauges обладают огромными API-интерфейсами, ни один из которых не преобразуется тривиально.

Другими словами, вы не сможете сделать такой переход автоматически. Если причиной перехода на С# является возможность перевода кода в файл .exe, на рынке Java существуют различные варианты.

Ответ 6

Сейчас я тестирую Tangible Solution (это не бесплатно)

Конвертер Tangible Source

И он добавит помощника класса. Но вне его результат выглядит отлично.

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), который хорош, но он не нужен. Вне этого, код результата довольно ясен.

Ответ 8

Вы пробовали XMLVM? У него есть возможность автоматически конвертировать в С#, как это:

xmlvm --in=myjar.jar --out=output_dir --target=csharp

Ответ 9

Недавно Xamarin портировал андроид на моно, используя sharpen. Проверьте эту ссылку.