2017-01-31 2 views
1

Я новичок в Java, Я пытаюсь настроить выходные классы, сгенерированные компилятором JASN1 OpenMUC (для java 1.5+), чтобы запустить его платформу BGS5 CLDC 1.1. Большинство базовых классов были изменены и скомпилированы успешно, но по-прежнему существует проблема с использованием параметризованного класса List или collection. Он используется на одном из базовых классов и сильно используется в большинстве подготовленных классов. и он не поддерживается java-библиотеками устройства CLDC 1.1.Перенос пакета ASN1 со стандартной Java (JRE 1.5+) в J2ME (CLDC 1.1)

Мой вопрос состоит из двух ветвей:

  1. Есть ли способ сделать исходный перевод из стандартного Java в J2ME?
  2. Как заменить параметризованный список в исходном коде базовым поддерживаемым классом, таким как Vector.

Образец целевого класса, содержащий параметрический элемент списка является:

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

Вы можете думать об этом как о двухэтапном процессе. Во-первых, избавиться от использования дженериков. Чтобы устранить дженерики, вы должны использовать только простой список (без угловых скобок), а затем добавлять приведения (от Object to IOStatus или что-то еще) там, где это необходимо (например, всякий раз, когда вы получаете объекты из списка).

Шаг второй: замените List на Vector. Вам нужно будет сравнить документацию для двух классов и соответствующим образом скорректировать код.

Совет (возможно, вы уже знаете это): используйте параметр java -bootclasspath, чтобы указать ваш компилятор в библиотеку классов CLDC 1.1, чтобы убедиться, что вы не используете API, которые не поддерживаются, и -source 1.3 и -target 1.3 to убедитесь, что ваш источник совместим и что вы создаете совместимый байтовый код.

+0

Но спешите! Наступает Java 9, а затем параметры -source и -target больше не будут. :-( –

+0

Спасибо, Кевин, возможно, я был неясно, средняя идея избегает игры с автоматически сгенерированными классами. Это занимает много времени, когда изменяется шаблон мета-asn1, я предпочитаю изменять базовые классы и делать менее зависимую коррекцию. –

Смежные вопросы