2017-01-31 18 views
1

Java에서 초보자 인 JASN1 OpenMUC 컴파일러 (Java 1.5+ 용)에서 생성 된 출력 클래스를 조정하여 실행하려고합니다. BGS5 CLDC 1.1 플랫폼. 대부분의 기본 클래스가 변경되고 컴파일되었지만 매개 변수가있는 List 또는 컬렉션 클래스 사용과 관련된 문제가 남아 있습니다. 기본 클래스 중 하나에서 사용되며 생성 된 클래스의 대부분에서 심각하게 사용됩니다. CLDC 1.1 장치의 Java 라이브러리에서는 지원되지 않습니다.표준 Java (JRE 1.5+)에서 J2ME (CLDC 1.1)로 ASN1 패키지 마이그레이션

  1. J2ME의 표준 자바에서 소스 번역을 할 수있는 방법이 있나요 :

    내 질문은 두 가지가있다?

  2. 어떻게 매개 변수가있는 List를 소스 코드에서 Vector와 같이 기본적으로 지원되는 클래스로 바꿀 수 있습니까?

parametrised 목록의 구성원을 포함하는 대상 클래스의 샘플은 다음과 같습니다

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

DeviceInputOutputStatus 및 IOStatus는 자동 생성 클래스입니다. –

답변

1

당신은 제네릭을 사용하지 않도록 생성 된 모든 코드를 수정해야합니다. 그보다 더 많은 컬렉션 클래스는 JavaME CLDC 1.1에서 지원되지 않기 때문에 컬렉션 클래스를 사용하지 않아야합니다.

두 단계 과정으로 생각할 수 있습니다. 첫째, 제네릭 사용을 제거하십시오. 제네릭을 제거하기 위해서는 일반 List (꺾쇠 괄호는 사용하지 않음)를 사용하고 필요에 따라 (예 : 목록에서 개체를 가져올 때마다) Casts (Object에서 IOStatus 등)로 캐스트를 추가합니다.

2 단계 : 목록을 Vector로 교체하십시오. 두 클래스의 설명서를 비교하고 이에 따라 코드를 조정해야합니다.

팁 (아마도 이미 알고있을 것입니다.) javac의 -bootclasspath 옵션을 사용하여 컴파일러에서 CLDC 1.1 클래스 라이브러리를 가리켜 지원되지 않는 API를 사용하지 않도록하고 -source 1.3 및 -target 1.3 to 소스가 호환 가능하고 호환 가능한 바이트 코드를 생성하는지 확인하십시오.

+0

하지만 서둘러! 자바 9가오고 나서, 소스와 타겟 매개 변수는 더 이상 존재하지 않을 것이다. :-( –

+0

감사합니다 케빈, 아마도 나는 명확하지 않았습니다. 자동 생성 클래스를 사용하는 것을 피하는 것이 좋습니다. 메타 asn1 템플릿이 변경 될 때마다 시간이 많이 걸리고, 기본 클래스를 변경하고 덜 의존적 인 수정을하는 것을 선호합니다. –