1

私は Java の初心者です。JASN1 OpenMUCコンパイラ (Java 1.5+ 用) によって生成された出力クラスを調整して、BGS5 CLDC 1.1 プラットフォームで実行しようとしています。ほとんどの基本的なクラスは変更され、正常にコンパイルされていますが、パラメータ化されたリストまたはコレクション クラスの使用に関する問題が残っています。それは基本的なクラスの 1 つで使用され、ほとんどの生成されたクラスで厳しく使用されます。また、CLDC 1.1 デバイスの Java ライブラリではサポートされていません。

私の質問には2つの分岐があります:

  1. 標準 Java から J2ME へのソース変換を行う方法はありますか?
  2. ソース コード内のパラメーター化されたリストを、Vector のような基本的なサポートされているクラスに置き換えるにはどうすればよいですか。

パラメーター化された 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;
    }

}
4

1 に答える 1

1

ジェネリックを使用しないように、生成されたすべてのコードを変更する必要があります。それ以上に、JavaME CLDC 1.1 ではサポートされていないため、コレクション クラスを使用しないでください。

これは 2 段階のプロセスと考えることができます。まず、ジェネリックの使用を取り除きます。ジェネリックをなくすには、単純な List を使用し (その後に山括弧は付けません)、必要に応じて (Object から IOStatus などに) キャストを追加します (たとえば、リストからオブジェクトを取得するたびに)。

ステップ 2: List を Vector に置き換えます。2 つのクラスのドキュメントを比較し、それに応じてコードを調整する必要があります。

ヒント (おそらくこれは既にご存じでしょう): javac の -bootclasspath オプションを使用して、コンパイラが CLDC 1.1 クラス ライブラリを指すようにし、サポートされていない API を使用しないようにします。互換性があり、互換性のあるバイト コードを生成する必要があります。

于 2017-01-31T18:32:05.743 に答える