2017-01-31 2 views
1

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

  1. 私の質問には、二つの枝を持っていますか?

  2. どのようにして、ベクトルのような基本的なサポートされているクラスでソースコード内のパラメトリックリストを置き換えることができます。

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

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

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

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

ヒント(すでにこれは分かっているでしょう):javacの-bootclasspathオプションを使用して、コンパイラがCLDC 1.1クラスライブラリを指すようにして、サポートされていないAPIを使用しないようにします。-source 1.3と-target 1.3 toソースが互換性があり、互換性のあるバイトコードが生成されていることを確認してください。

+0

しかし、急いで! Java 9が来てから、-sourceと-targetのパラメータはもう消えません。 :-( –

+0

ありがとうKevin、おそらく私は明確ではありませんでしたが、自動生成されたクラスで遊んでいるのを避けています。 –

関連する問題