我是Java新手, 我正在尝试调整 JASN1 OpenMUC 生成的输出类编译器(适用于 java 1.5+)以在 BGS5 CLDC 1.1 平台上运行它。 大多数基本类已被更改并成功编译,但仍然存在有关使用参数化列表或集合类的问题。它仅用于基础类(class)之一,并且在大多数生产类(class)中使用严重。并且 CLDC 1.1 设备的 java 库不支持它。
我的问题有两个分支:
- 有什么办法可以将标准java源代码翻译成J2ME吗?
- 如何用基本支持的类(如 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/