Je devais convertir une application Java 1.5se en C # 2.0.
Quelqu'un connaît-il un outil (de préférence gratuit/open source) pour ce faire?
Assistant de conversion de langage Java . Installé en option avec (au moins) Visual Studio 2005 Standard Edition.
Sélectionnez File/Open/Convert/Java Language Conversion Assistant.
N'oubliez pas de parcourir manuellement le code par la suite. Il y aura beaucoup de problèmes.
Même s'il existe un tel outil, je vous recommande fortement de faire la conversion à la main. Les convertisseurs automatiques reproduisent souvent fidèlement le code, mais ignorent les idiomes - car ils seraient vraiment très difficiles à obtenir correctement.
De plus, les différences entre les génériques dans .NET et Java pourraient conduire à des décisions très différentes dans les deux bases de code.
Vraiment, vous feriez mieux de le faire à la main.
Un bon outil à utiliser s'appelle Sharpen, qui est open source.
Cet outil a été bifurqué et mis à jour par l'équipe Xamarin et ils l'ont utilisé pour traduire les API Android en C #. Leur copie peut être trouvée ici:
ikvm expose Java classes dans .NET. Ce n'est pas un convertisseur, mais d'après mon expérience, je le recommande à tous ceux qui font la transition de Java vers .NET
Alors que la syntaxe des deux langues semble similaire, la sémantique est très différente. Pour mentionner quelques endroits, les deux langues s'égarent
En d'autres termes, vous ne pourrez pas effectuer une telle transition automatiquement. Si la raison du passage à C # est de pouvoir traduire votre code dans un fichier .exe, il existe également diverses options sur le marché Java.
En ce moment, je teste Tangible Solution (ce n'est pas gratuit)
Convertisseur de source tangible
Et il ajoute un assistant de classe. Mais en dehors, le résultat semble 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 # (conversion)
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;
C'est un cas facile mais ça marche bien. Cependant, comme je l'ai dit plus tôt, il utilise un assistant de classe (StringHelperClass.StringSplit) qui est bien, mais il est inutile. En dehors de cela, le code de résultat est assez clair.
Microsoft avait son propre convertisseur Java to C # Converter - Microsoft Java Language Conversion Assistant 3.
Avez-vous essayé XMLVM ? Il a une option pour convertir automatiquement en C # comme ceci:
xmlvm --in=myjar.jar --out=output_dir --target=csharp
Récemment, Xamarin a porté Android en mono en utilisant sharpen. Consultez le lien this .