将ASN1包从标准Java(JRE 1.5+;)迁移到J2ME(CLDC 1.1)
我是Java的新手, 我试图调整JASN1编译器(针对java 1.5+)生成的输出类,使其在BGS5 CLDC 1.1平台上运行。 大多数基本类都已成功修改和编译,但在使用参数化列表或集合类方面仍然存在问题。它在一个基本类上使用,在大多数生成类中使用严重。CLDC1.1设备的java库也不支持它 我的问题有两个方面:将ASN1包从标准Java(JRE 1.5+;)迁移到J2ME(CLDC 1.1),java,arraylist,java-me,asn.1,cldc,Java,Arraylist,Java Me,Asn.1,Cldc,我是Java的新手, 我试图调整JASN1编译器(针对java 1.5+)生成的输出类,使其在BGS5 CLDC 1.1平台上运行。 大多数基本类都已成功修改和编译,但在使用参数化列表或集合类方面仍然存在问题。它在一个基本类上使用,在大多数生成类中使用严重。CLDC1.1设备的java库也不支持它 我的问题有两个方面: 有没有办法将源代码从标准java翻译到J2ME 如何用基本支持的类(如Vector)替换源代码中的参数化列表 包含参数化列表成员的目标类的示例为: //This class fi
//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;
}
}
//该类文件由jASN1 v1.6.0自动生成(http://www.openmuc.org)
包我的包;
导入java.util.List;
导入java.util.ArrayList;
导入java.util.Iterator;
//这些软件包不可用
公共类设备输入输出状态{
公共列表seqOf=null;
//IOStatus是包的一个类
公用设备输入输出状态(){
seqOf=newarraylist();
}
公共整数编码(BerByteArrayOutputStream os)引发IOException
{
int代码长度=0;
对于(int i=(seqOf.size()-1);i>=0;i--){
codeLength+=seqOf.get(i).encode(os,true);
//编码是IOStatus的一种方法
}
返回码长;
}
}
您必须修改所有生成的代码,以避免使用泛型。更重要的是,不要使用任何集合类,因为JavaME CLDC 1.1不支持它们
你可以把这看作是一个两步的过程。首先,摆脱泛型的使用。为了消除泛型,您可以只使用普通列表(后面没有尖括号),然后在需要的地方(例如,当您从列表中获取对象时)添加强制转换(从Object到IOStatus或其他)
第二步:用向量替换列表。您必须比较这两个类的文档,并相应地调整代码
提示(可能您已经知道这一点):使用javac的-bootclasspath选项将编译器指向CLDC 1.1类库,以确保您不使用不受支持的API,-source 1.3和-target 1.3,以确保您的源代码是兼容的,并生成兼容的字节码。但请快点!Java 9即将到来,然后-源和-目标参数将不再存在-(谢谢Kevin,也许我不太清楚,我的意思是避免玩自动生成的类。每当meta asn1模板发生变化时,我都会花费时间,我更喜欢改变基本类并进行较少的依赖性更正。DeviceInputOutStatus和IOStatus是自动生成的类。