将ASN1包从标准Ja​​va(JRE 1.5+)迁移到J2ME(CLDC 1.1)

时间:2017-01-31 10:32:51

标签: java arraylist java-me asn.1 cldc

我是Java的新手, 我正在尝试调整JASN1 OpenMUC编译器(对于java 1.5+)生成的输出类,以便在BGS5 CLDC 1.1平台上运行它。 大多数基本类已被成功修改和编译,但仍存在使用参数化List或集合类的问题。它用于基本类之一,并在大多数生产类中严格使用。 CLDC 1.1设备的Java库不支持它。

我的问题有两个分支:

  1. 有没有办法从标准java到J2ME进行源代码翻译?
  2. 如何通过基本支持的类(如Vector。)替换源代码中的参数化列表。
  3. 包含参数化List成员的目标类的示例是:

    //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;
        }
    
    }
    

1 个答案:

答案 0 :(得分:1)

您必须修改所有生成的代码才能使用泛型。更重要的是,不要使用任何集合类,因为它们在JavaME CLDC 1.1中不受支持。

您可以将此视为一个两步过程。首先,摆脱泛型的使用。要消除泛型,您只需使用普通List(后面没有尖括号),然后在需要的地方添加强制转换(从Object到IOStatus或其他)(例如,每当你从列表中取出对象时)。

第二步:用Vector替换List。您必须比较两个类的文档并相应地调整代码。

提示(可能你已经知道了):使用javac的-bootclasspath选项将编译器指向CLDC 1.1类库,以确保不使用不受支持的API和-source 1.3和-target 1.3来确保您的源兼容,并且您生成兼容的字节码。