2008-10-03 7 views
5

Je suis en train de porter une bibliothèque Java en C#. J'utilise Visual Studio 2008, donc je n'ai pas le programme JLCA (Java Conversion Language Assistant) abandonné.Comment convertir le code Java en code C#?

Mon approche consiste à créer une nouvelle solution avec une structure de projet similaire à celle de la bibliothèque Java, puis de copier le code java dans un fichier C# et de le convertir en ligne C# ligne par ligne valide. Considérant que je trouve Java facile à lire, les différences subtiles dans les deux langues m'ont surpris. Certaines choses sont faciles à porter (espaces de noms, héritage, etc.), mais certaines choses ont été étonnamment différentes, comme la visibilité des membres privés dans les classes imbriquées, le remplacement des méthodes virtuelles et le comportement des types intégrés. Je ne comprends pas tout à fait ces choses et je suis sûr qu'il y a beaucoup d'autres différences que je n'ai pas encore vues.

J'ai un long chemin à parcourir pour ce projet. Quelles règles générales je peux appliquer pendant cette conversion pour gérer les différences de langue correctement?

+0

Voir ici pour des suggestions sur la conversion de Java à C# automatisé: http: // stackoverflow .com/questions/443010/where-can-je-trouver-un-java-à-c-sharp-converter –

Répondre

3

que vous le faites dans la seule façon saine d'esprit, vous pouvez ... la plus grande aide sera ce document de Dare Obasanjo qui énumère les différences entre les deux langues:

http://www.25hoursaday.com/CsharpVsJava.html

BTW, changer tout getter et setter méthodes dans les propriétés ... Pas besoin d'avoir la fonction de bibliothèque C# juste la même que la bibliothèque java, sauf si vous allez pour une compatibilité d'interface parfaite.

+0

Merci pour le lien - c'est un excellent matériel de référence pour ce que je fais. – Lee

+0

"changez toutes les méthodes getter et setter en propriétés" - mieux y réfléchir. Il serait plus correct de dire, changer pour les propriétés [comme spécifié dans les directives MSDN] (https://msdn.microsoft.com/en-us/library/ms229054 (v = vs.100) .aspx). Je devais juste revenir à un groupe de "propriétés" de retour à des méthodes qui étaient 1) définir sans get 2) non-déterministe 3) renvoyé tableaux construits ... que quelqu'un d'autre a fait. Convertir aveuglément en propriétés sans considérer que les propriétés sont supposées agir comme des champs n'est pas une bonne stratégie. En cas de doute, gardez-la comme méthode. – NightOwl888

0

Je ne sais pas si c'est vraiment la meilleure façon de convertir le code ligne par ligne, surtout si les obstacles deviennent écrasants. Bien sûr, le code Java vous donne une ligne directrice et la structure de base, mais je pense qu'à la fin, le plus important est que la bibliothèque offre les mêmes fonctionnalités que Java.

0

J'ai entendu quelque chose l'autre jour à propos d'une version .net de Java. Si un tel monstre était disponible, seriez-vous simplement capable de compiler la source java dans les bibliothèques intermédiaires .net?

+0

Existe-t-il vraiment? Si oui, où avez-vous entendu parler? –

+0

Désolé, Vous ne pouvez pas le trouver maintenant. Je crois que c'était un ajout pour certains produits (pas une langue libre), mais j'aurais dû saisir des références. Heck c'était il y a 4 ans de toute façon - si c'était un produit, il est presque certainement parti maintenant! :( –

1

Si vous avez une petite quantité de code, alors une conversion ligne par ligne est probablement la plus efficace.

Si vous avez une grande quantité de code que je considérerais:

  1. Vous cherchez un produit qui fait la conversation pour vous.
  2. Écrire un script (Ruby ou Perl pourrait être un bon candidat) pour faire la conversion pour vous - au moins les choses monotones! Il pourrait s'agir d'une simple recherche/remplacement pour les différences de mots clés et le changement de nom des fichiers. Vous donne plus de temps/doigts pour vous concentrer sur les choses les plus difficiles.
3

Couple d'autres options à noter:

  • J# est le langage Java implémentation de Microsoft sur .NET. Vous pouvez accéder aux bibliothèques Java (jusqu'à la version 1.4 *, de toute façon). * en fait Java 1.1.4 pour java.io/lang, et 1.2 pour java.util + gardez à l'esprit que J # fin de la vie est ~ 2015-2017 pour J # 2.0 Redist

  • Mono's IKVM gère également Java sur le CLR, l'accès à d'autres programmes .NET .

  • Microsoft Visual Studio 2005 est avec une "conversion de langage Java assistant" qui convertit les programmes Java aux programmes C# automatiquement pour vous.

+0

Gardez à l'esprit que Java 1.4 est quelque chose comme 10 ans maintenant? Pour cette raison, J # devrait être utilisé uniquement dans des cas exceptionnels.Il était destiné comme un chemin pour les clients J ++ existants (souvenez-vous que?) .NET. Une solution générale Java-on-.NET – Cheeso

1

Une idée plus rapide et sale: vous pouvez utiliser IKVM pour convertir le pot Java à un ensemble de .NET, puis utilisez Reflector --combined avec le FileDisassembler Add-en désassembler en un Projet Visual C#

(Soit dit en passant, je n'ai pas réellement utilisé IKVM - Quelqu'un veut se porter garant que ce processus fonctionnerait?)

+2

La bibliothèque IKVM peut être utilisée mais si vous tentez de la désassembler dans Reflector, vous constaterez que certains des fichiers MSIL générés par IKVM ne peuvent pas être dissociés en C# Je suppose que les constructions C# sont un sous-ensemble de toutes les constructions possibles avec IL, ou au moins Reflector ne gère qu'un sous-ensemble typique/attendu. – redcalx