2017-01-31 3 views
1

Ich bin Neuling in Java, Ich versuche, die Ausgabeklassen von JASN1 OpenMUC Compiler (für Java 1.5 +) generiert, um es auszuführen eine BGS5 CLDC 1.1-Plattform. Die meisten grundlegenden Klassen wurden geändert und erfolgreich kompiliert, aber es bleibt ein Problem hinsichtlich der Verwendung von parametrisierten List oder Collection-Klasse. Es wird auf einer der Grundklassen verwendet und in den meisten der erzeugten Klassen streng verwendet. und es wird nicht von den Java-Bibliotheken des CLDC 1.1-Geräts unterstützt.ASN1-Paket von Standard-Java (JRE 1.5+) in J2ME (CLDC 1.1) umwandeln

Meine Frage hat zwei Niederlassungen:

  1. Gibt es eine Möglichkeit, die Quelle Übersetzung von Standard-Java J2ME zu tun?
  2. Wie kann ich die parametrisierte Liste im Quellcode durch eine grundlegende unterstützte Klasse wie Vector ersetzen.

Eine Probe einer gezielten Klasse die parametrisierte Liste Mitglied enthält, ist:

//This class file was automatically generated by jASN1 v1.6.0 (http://www.openmuc.org) 

package MyPackage; 

import java.util.List; 
import java.util.ArrayList; 
import java.util.Iterator; 
// those packages are not available 

public class DeviceInputOutputStatus { 

    public List<IOStatus> seqOf = null; 
    //IOStatus is a class of the package 

    public DeviceInputOutputStatus() { 
     seqOf = new ArrayList<IOStatus>(); 
    } 

    public int encode(BerByteArrayOutputStream os) throws IOException 
    { 
     int codeLength = 0; 
     for (int i = (seqOf.size() - 1); i >= 0; i--) { 
       codeLength += seqOf.get(i).encode(os, true); 
       //encode is a method of IOStatus 
      } 
     return codeLength; 
    } 

} 
+0

DeviceInputOutputStatus und IOStatus sind automatisch generierte Klassen. –

Antwort

1

Sie alle Ihre generierten Code ändern müssen Generika nicht verwenden. Mehr noch, keine der Collections-Klassen zu verwenden, da sie in JavaME CLDC 1.1 nicht unterstützt werden.

Sie können sich dies als zweistufigen Prozess vorstellen. Erstens, die Verwendung von Generika loswerden. Um die Generika zu eliminieren, würden Sie einfach nur List verwenden (keine spitzen Klammern folgen) und dann Abbilder hinzufügen (von Objekt zu IOStatus oder was auch immer), wo immer nötig (z. B. wenn Sie Objekte aus der Liste entfernen).

Schritt zwei: Liste durch Vektor ersetzen. Sie müssen die Dokumentation für die beiden Klassen vergleichen und Ihren Code entsprechend anpassen.

Tipp (wahrscheinlich kennen Sie das schon): Verwenden Sie die Option javac -bootclasspath, um Ihren Compiler auf die CLDC 1.1-Klassenbibliothek zu verweisen, um sicherzustellen, dass Sie nicht unterstützte API und -source 1.3 und -target 1.3 verwenden Stellen Sie sicher, dass Ihre Quelle kompatibel ist und dass Sie einen kompatiblen Byte-Code erzeugen.

+0

Aber beeilen Sie sich! Java 9 kommt, und dann -source und -target-Parameter werden nicht mehr sein. :-( –

+0

Danke Kevin, vielleicht war ich nicht klar, die gemeine Idee ist es, das Spielen mit den automatisch generierten Klassen zu vermeiden. Es ist zeitaufwendig, wenn sich die Meta-asn1-Vorlage ändert, ich bevorzuge es, die Basisklassen zu ändern und weniger abhängige Korrekturen vorzunehmen. –

Verwandte Themen