我是Java的新手, 我正在尝试调整JASN1 OpenMUC编译器(对于java 1.5+)生成的输出类,以便在BGS5 CLDC 1.1平台上运行它。 大多数基本类已被成功修改和编译,但仍存在使用参数化List或集合类的问题。它用于基本类之一,并在大多数生产类中严格使用。 CLDC 1.1设备的Java库不支持它。
我的问题有两个分支:
包含参数化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;
}
}
答案 0 :(得分:1)
您必须修改所有生成的代码才能使用泛型。更重要的是,不要使用任何集合类,因为它们在JavaME CLDC 1.1中不受支持。
您可以将此视为一个两步过程。首先,摆脱泛型的使用。要消除泛型,您只需使用普通List(后面没有尖括号),然后在需要的地方添加强制转换(从Object到IOStatus或其他)(例如,每当你从列表中取出对象时)。
第二步:用Vector替换List。您必须比较两个类的文档并相应地调整代码。
提示(可能你已经知道了):使用javac的-bootclasspath选项将编译器指向CLDC 1.1类库,以确保不使用不受支持的API和-source 1.3和-target 1.3来确保您的源兼容,并且您生成兼容的字节码。