java - 将 ASN1 包从标准 Java (JRE 1.5+) 迁移到 J2ME (CLDC 1.1)

标签 java arraylist java-me asn.1 cldc

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

我的问题有两个分支:

  1. 有什么办法可以将标准java源代码翻译成J2ME吗?
  2. 如何用基本支持的类(如 Vector)替换源代码中的参数化列表。

包含参数化列表成员的目标类的示例是:

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

}

最佳答案

您必须修改所有生成的代码才能不使用泛型。除此之外,不要使用任何集合类,因为 JavaME CLDC 1.1 不支持它们。

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

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

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

关于java - 将 ASN1 包从标准 Java (JRE 1.5+) 迁移到 J2ME (CLDC 1.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41955303/

相关文章:

java - 从 j2me 读取图像到 c++

java - Jackson - 如何处理(反序列化)嵌套的 JSON?

java - 为什么静态根据上下文具有不同的含义?

java - 寻找 Amazon DynamoDB java 库

java - 您会如何为体育节目编写深度图和阵容?

Java 中 JavaScript 风格的数组填充

java - 如何通过java使用JSOUP抓取和下载HTML页面中的表格

java - 根据 "Fibonacci sequence"寻找答案

xml - 如何让 kXML 发挥作用?

java - j2me网络