web-dev-qa-db-fra.com

Où puis-je trouver un convertisseur Java vers C #?

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?

44
CSharpDevLondon

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.

16
Rasmus Faber

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.

28
Jon Skeet

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:

26
alfdev

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

13
turtlewax

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

  • Génériques, Java compile tout en objets, C # conserve les types génériques
  • Exceptions, Java a vérifié les exceptions, C # ne le fait pas
  • Classes anonymes et classes internes, Java a des classes anonymes et des classes imbriquées, C # n'en a pas. Au lieu de cela C # a des délégués et des événements. Le modèle de programmation est donc très différent
  • délégués, C # a la notion de pointeurs de fonction qui conduit à une manière différente de programmer.
  • événements, C # a la notion d'événements et de composants qui conduit à une manière différente de programmer.
  • API, en mettant de côté toutes les différences sémantiques, les deux langages ont accompagné d'énormes API, dont aucune n'est trivialement convertie.

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.

7
Carlo V. Dango

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.

5
magallanes

Microsoft avait son propre convertisseur Java to C # Converter - Microsoft Java Language Conversion Assistant 3.

3
revs

Avez-vous essayé XMLVM ? Il a une option pour convertir automatiquement en C # comme ceci:

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

Récemment, Xamarin a porté Android en mono en utilisant sharpen. Consultez le lien this .

0
Alex