我是Java的新手,我试图调整JASN1 OpenMUC编译器(用于java 1.5+)生成的输出类,以便在BGS5 CLDC1.1平台上运行它。大多数基本类已被成功地修改和编译,但在使用参数化列表或集合类方面仍然存在问题。它在一个基类上使用,在大多数产生的类中使用严重。而且CLDC1.1设备的java库也不支持它。
我的问题有两个分支:
包含参数化列表成员的目标类的示例是:
//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;
}
}
发布于 2017-01-31 18:32:05
您必须修改所有生成的代码,以避免使用泛型。更重要的是,不要使用任何集合类,因为在JavaME CLDC1.1中不支持它们。
你可以把这看作一个两步的过程。首先,消除泛型的使用。为了消除泛型,您只需使用普通列表(后面没有尖括号),然后在需要的地方添加强制转换(从Object到IOStatus或其他什么)(例如,每当您从列表中获取对象时)。
第二步:用向量替换列表。您必须比较这两个类的文档并相应地调整代码。
提示(您可能已经知道这一点):使用javac的-bootclasspath选项将编译器指向CLDC1.1类库,以确保不使用不受支持的API,使用-source 1.3和-target 1.3确保源代码兼容,并生成兼容的字节代码。
https://stackoverflow.com/questions/41955303
复制相似问题