2008-09-17 20 views
78

¿Existe una herramienta efectiva para convertir código C# a código Java?¿Existe una herramienta efectiva para convertir código C# a código Java?

+0

@Rachel: Soy nuevo en Java, pero sé C# bastante bien, y tropezó con un proyecto de código abierto de Java en SourceForce que parece estar muerta, cuya funcionalidad Me gustaría transformarse en un nuevo proyecto de C#. Me gustaría tener una herramienta para hacer que haga algo pesado y convertir al menos los métodos y estructuras básicos, después de lo cual puedo ver el resultado y usar mi cerebro para traducir lo que quede en algo que pueda usar dentro de mi Zona de confort .NET. –

+5

@Rachel: Alquimia. La gente siempre ha intentado convertir las cosas sin valor en oro. ; P – Bobby

+1

Sí, la mayoría de las veces, los proyectos abandonados pueden ser extremadamente valiosos ... el último proyecto abandonado que descubrí simplemente acechando Código PSC me hizo 7200 $ usd completamente automático, me gusta cómo me gusta. Hasta que se volvió obsoleto de nuevo: S – SSpoke

Respuesta

2

No se convierten directamente, pero permite la interoperabilidad entre .NET y J2EE.

+2

El enlace es antiguo y solo apunta a los productos de SharePoint ahora. – Trisped

5

No es una herramienta de Microsoft para convertir Java a C#. Para la dirección opuesta, eche un vistazo a here y here. Si esto no funciona, no debería tomar demasiado tiempo convertir la fuente manualmente porque C# y Java son muy similares,

+1

que utiliza JLCA de Microsoft y realmente funcionó: http://weblogs.asp.net/jgalloway/archive/2007/01/24/identicons-ported-from-java-servlet-to-httphandler.aspx –

+5

"C# y java son muy similares "jajaja, buena broma, prueba los genéricos en Java después de trabajar con ellos en C# –

+0

Las primeras versiones de C# eran casi idénticas a Java, pero ahora parece que se han movido más lejos. –

42

Nunca he encontrado una herramienta de conversión C# -> Java. La sintaxis sería bastante fácil, pero los marcos son dramáticamente diferentes. Incluso si hubiera una herramienta, recomendaría encarecidamente no hacerlo. He trabajado en varios proyectos de "migración" y no puedo decir enfáticamente que, si bien la conversión parece ser una buena opción, los proyectos de conversión siempre siempre siempre entregan dinero en pozos. No es un atajo, con lo que terminamos es un código que no es legible y no aprovecha el idioma de destino. hablando desde la experiencia personal, suponga que una reescritura es la opción más barata.

+29

En otras palabras, la "herramienta" más efectiva es un programador. :-) – marcospereira

+29

"La sintaxis sería lo suficientemente fácil" siempre y cuando no utilice lambdas, linq, eventos (factibles pero difíciles de obtener exóticamente la semántica de la multidifusión), métodos de extensión, cualquier introspección, cualquier genérico que se base en nuevos() o por defecto (T) (tipo de borrado es una perra), cualquier bloque de iterador, variables sin firmar, sobrecarga de operador ... Podría seguir, pero realmente. una aplicación java, traducida a C#, y luego de vuelta sería bastante fácil, supongo.Pero ese es un subconjunto muy restringido de C# – ShuggyCoUk

+0

Dicho esto, todavía obtienes uno más porque la reescritura será casi con toda seguridad más barata, producir un mejor producto y una mejor comprensión para los programadores que lo hicieron. – ShuggyCoUk

2

C# tiene algunas características más que Java. Tomemos como ejemplo a los delegados: muchas aplicaciones C# muy simples usan delegados, mientras que las personas de Java calculan que el patrón del observador fue suficiente. Entonces, para que una herramienta convierta una aplicación de C# que usa delegados, debería traducir la estructura de usar delegados a una implementación del patrón de observador. Otro problema es el hecho de que los métodos de C# no son virtuales por defecto mientras que los métodos de Java son. Además, Java no tiene una forma de hacer que los métodos no sean virtuales. Esto crea otro problema: una aplicación en C# podría aprovechar el comportamiento de métodos no virtuales a través del polimorfismo de una manera que no se traduzca directamente a Java. Si miras a tu alrededor, probablemente encontrarás que hay muchas herramientas para convertir Java en C#, ya que es un lenguaje más simple (por favor no me llames, no lo dije peor lo dije más simple); Sin embargo, encontrará muy pocas herramientas decente que conviertan C# a Java.

Recomendaría cambiar su enfoque para convertir de Java a C#, ya que creará menos dolores de cabeza en el largo plazo. Db4Objects lanzó recientemente su herramienta interna que utilizan para convertir Db4o en C# para el público. Se llama Sharpen. Si se registra con su sitio se puede ver el enlace con instrucciones sobre cómo utilizar Afilar: http://developer.db4o.com/Resources/view.aspx/Reference/Sharpen/How_To_Setup_Sharpen

(He sido registrado con ellos por un tiempo y son buenos por no spam)

+0

linq viene a mi mente. ¿Cómo traducir el código que usa linq a java? – marcospereira

+1

"Java no tiene una forma de hacer que los métodos no sean virtuales". - Java tiene la palabra clave 'final', equivalente a 'sello' en c sharp, cuando se coloca antes de un método. –

0

I No estoy seguro de lo que está tratando de hacer si desea convertir C# a java, pero si es la interoperabilidad .net lo que necesita, es posible que desee verificar Mono

1

Esto está fuera de lugar, pero no es ¿Para qué era Grasshopper?

+0

esto convierte CIL (MSIL) en código de byte java. útil para seguro, pero no directamente lo que pidió el OP. Diría que es más probable que sea realmente * útil * para cualquier otra cosa que no sea una conversión de un solo disparo, pero ahí está. – ShuggyCoUk

+0

No parece que Grasshopper aún esté disponible. Si lees los comentarios sobre [este artículo] (http://www.theserverside.com/news/thread.tss?thread_id=50450) parece que Grasshopper no se usaba mucho ni tenía muchas funciones. También parece que [Mainsoft ha cambiado el foco] (http://en.wikipedia.org/wiki/Mainsoft) (que podría ser el motivo por el que ya no puedo encontrarlo). – Trisped

2

tratar de ver Net2Java Me parece la mejor opción para automático (o semiautomático al menos) la conversión de C# a Java

26

Tenemos una aplicación que necesitamos mantener en C# y Java. Como mantenemos activamente este producto, un puerto de una sola vez no era una opción. Investigamos Net2Java y las herramientas de Mainsoft, pero ninguno cumplió con nuestros requisitos (Net2Java por falta de solidez y Mainsoft por el costo y la falta de conversión del código fuente). Creamos nuestra propia herramienta llamada CS2J que se ejecuta como parte de nuestro script de compilación nocturno y es un puerto muy efectivo de nuestro código C# para Java.En este momento es precisamente lo suficientemente bueno para traducir nuestra aplicación, pero tendría un largo camino por recorrer antes de ser considerada una herramienta integral. Hemos licenciado la tecnología para algunas partes con necesidades similares y estamos jugando con la idea de publicarla públicamente, pero nuestra actividad principal simplemente nos mantiene demasiado ocupados en estos días.

+4

ah, pero si lo publicara como código abierto, encontraría personas que lo usarían (bueno, algunos de ellos) lo ampliarían para satisfacer sus necesidades, lo que podría convertirse en sus necesidades en el futuro. Si gana poco dinero con las licencias, también podría hacer esto. – gbjbaanb

+3

@gbjbaanb, los proyectos de código abierto exitosos requieren nutrir y construir una comunidad. Descargar el código fuente sin preocuparse por él, significa que la mayoría de los desarrolladores de código abierto considerarían primero otras opciones. –

+3

Solo para actualizar: ahora se ha lanzado CS2J como fuente abierta. (No sé nada más que eso personalmente, al menos no todavía). – RenniePet

0

Bueno, la sintaxis es casi la misma, pero dependen de diferentes marcos, por lo que la única forma de convertirlo es obtener a alguien que conozca ambos idiomas y convertir el código :) la respuesta a su pregunta es no, no hay "efectivo" herramienta para convertir C# a java

2

These chicos parecen tener una solución para esto, pero no he probado todavía. También tienen una versión demo del convertidor.

0

Posiblemente se podría utilizar jni4net - opensource bridge en su lugar? O la lista de other options Lo sé.

+0

Para aquellos que se preguntan, jni4net es un puente entre JVM y CLR. Permite que su código .Net (como VB o C#) se ejecute en el CLR para ejecutar también código en el código JVM y Java que se ejecuta en la JVM para ejecutar cod en el CLR. Para obtener más información, lea las [publicaciones de 2009/10/10, 2009/10/31 y 2009/11/03 en el blog] (http://zamboch.blogspot.com/search/label/jni4net) ya que no existe parece ser una página que dice lo que hace. – Trisped

+0

http://jni4net.sourceforge.net/ es un poco mejor –

4

Aunque esta es una pregunta antigua, eche un vistazo a xmlVM http://www.xmlvm.org/clr2jvm, no estoy seguro de si ya es lo suficientemente maduro, aunque ya hace varios años que existe. XMLvm fue creado, creo, principalmente para traducir aplicaciones Android de Java al iPhone, sin embargo, su marco basado en la traducción de código XML es lo suficientemente flexible como para hacer otras combinaciones (ver los diagramas en el sitio).

En cuanto a una razón para hacer esta conversión, tal vez haya una necesidad de 'secuestrar' algunas de las highly abundant oss code y usarlas en su propio proyecto [Java].

Saludos

Rich

-2

Por qué no escribir en Haxe (http://haxe.org/) y convertirlo en lo que quiera que sea?

+4

Solo porque él ya tiene el código en C#, supongo. –

Cuestiones relacionadas