2009-01-14 18 views
39

Necesitaba convertir una aplicación Java 1.5se a C# 2.0.¿Dónde puedo encontrar un convertidor de Java a C#?

¿Alguien sabe de una herramienta (preferiblemente de fuente libre/abierta) para hacer esto?

+3

Utilice la mejor herramienta. Sus dedos y cerebro.

+1

Se agregó Bounty porque el Asistente de conversión de idioma Java ya no está disponible. He encontrado a Sharpen, pero ¿hay otras herramientas para eso? – Residuum

Respuesta

15

Java Language Conversion Assistant. Opcionalmente instalado con (al menos) Visual Studio 2005 Standard Edition.

Seleccione Archivo/Abrir/Convertir/Asistente de conversión de idioma Java.

Recuerde revisar manualmente el código posteriormente. Tendrá muchos problemas.

+0

¿Hay alguna otra alternativa en la conversión de Java a C#? He utilizado con éxito VS2005 para convertir código Java a C# sin demasiadas modificaciones a mano y realmente me gusta. – Gant

+6

No solo tendrá problemas en el nivel de implementación, sino que no se diseñará de manera idiomática .NET. Nuevamente digo, portar a mano ... –

+0

¡La herramienta es genial! Gracias – CSharpDevLondon

27

Incluso si existe una herramienta así, le recomiendo encarecidamente que realice la conversión a mano. Con frecuencia, los convertidores automáticos reproducirán fielmente el código, pero ignorarán las expresiones idiomáticas, porque sería muy, muy difícil hacerlo bien.

Además, las diferencias entre los genéricos en .NET y Java podrían llevar a decisiones muy diferentes en las dos bases de código.

Realmente, será mejor que lo hagas a mano.

+0

Estoy de acuerdo. Miré el Asistente de conversión de lenguaje Java para un proyecto relativamente pequeño y el trabajo de limpieza necesario después de la conversión no fue significativamente menor que el trabajo necesario para una nueva escritura. –

+0

Lo mismo, pero más de una vez a pesar de advertir enfáticamente a los clientes respectivos. –

13

ikvm expone clases de Java en .NET. No es un convertidor, pero basado en mi experiencia lo recomendaría a cualquiera que haga la transición de Java a .NET

7

Si bien la sintaxis de los dos idiomas parece similar, la semántica es muy diferente. Por mencionar algunos lugares las dos lenguas que se extravíe

  • genéricos, Java compila todo a objetos, C# retiene los tipos genéricos
  • excepciones, Java ha comprobado excepciones, C# no
  • clases anónimas y interior clases, Java tiene clases anónimas y clases anidadas, C# no tiene ninguno. En cambio C# tiene delegados y eventos. El modelo de programación es por lo tanto muy diferente
  • delegados, C# tiene la noción de punteros de función que conduce a una forma diferente de programación.
  • eventos, C# tiene la noción de eventos y componentes que conduce a una forma diferente de programación.
  • API, dejando a un lado todas las diferencias semánticas, ambos langauges tienen grandes API combinadas, ninguna de las cuales se convierte trivialmente.

En otras palabras, no podrá realizar dicha transición automáticamente. Si la razón para cambiar a C# es poder traducir su código a un archivo .exe, también hay varias opciones en el mercado de Java.

+0

C# tiene clases anidadas. Pensé que estabas equivocado, hice un poco de investigación y parece que las clases internas (una cosa de Java) son diferentes de las clases anidadas (presentes en ambos). Una sutileza interesante aunque oscura. –

+0

Sí clases internas y clases anidadas no son lo mismo. –

23

Una buena herramienta para usar se llama Sharpen, que es de código abierto.

Esta herramienta ha sido bifurcada y actualizada por el equipo Xamarin y la usaron para traducir las API de Android en C#.Su copia se puede encontrar aquí:

+5

El equipo Mono acaba de lanzar una nueva versión de Sharpen que usaron para traducir Android a C#. https://github.com/xamarin/XobotOS – pnewhook

+0

FYI Sharpen es un plugin de eclipse. – Jess

+0

También hay una versión de Sharpen/port para la línea de comandos: https://github.com/mono/sharpen –

5

En este momento, estoy probando solución tangible (que no es gratis)

Tangible Source Converter

Y añado una clase auxiliar . Pero fuera de eso, el resultado se ve bien.

Java: (original)

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; 

C# (conversión)

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; 

Es un caso fácil, pero funciona bien. Sin embargo, como dije antes, utiliza un Class Helper (StringHelperClass.StringSplit) que está bien, pero es innecesario. Fuera de él, el código de resultado es bastante claro.

2

¿Has probado XMLVM? Tiene una opción para convertir automáticamente a C# como esto:

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

androide Recientemente Xamarin han portado a mono usando afilar. Consulte el enlace this.

Cuestiones relacionadas