GWT: Как к предотвращению вызовов к dynamicCast и canCastUnsafe в сгенерированном коде JavaScript?

Попробуйте:

$user = Users::find(5); //get the inital user
$picFor = $user->pic_for; //get its pointer
$pictures = []; //initialize the result array
while (!is_null($user) && !is_null($picFor)) { //if I have a valid user and pointer
  $user = Users::find($picFor); //get the user for the pointer
  if ($user !== null) { //if I have a valid user
    $picFor = $user->pic_for; //get the next pointer
    $pictures[]= $user->id; //add the user id to the result array
  }   
}

Основная проблема, с которой вы столкнулись, заключается в том, что вы пропускаете некоторые нулевые проверки.

7
задан Mark Renouf 1 April 2009 в 15:09
поделиться

3 ответа

К сожалению, я все еще не точно ясен на причине, но на основе моего опыта, это кажется от явных бросков, как:

((Comparable) obj).compareTo(other)

Сгенерированный JavaScript похож:

dynamicCast(obj, 1).compareTo(other);

Где 1 сгенерированный идентификатор типа, представляющий цель броска. dynamicCast в свою очередь называет canCastUnsafe и если ложь, он бросает ClassCastException. Значение этого было обсуждено, так как это будет уже поймано в размещенном режиме.

Это может обойтись с JSNI:

public static native int compare(Object a, Object b) /*-{
    return a.@java.lang.Comparable::compareTo(Ljava/lang/Object;)(b); 
}-*/;
4
ответ дан 7 December 2019 в 12:25
поделиться

Не знайте, видели ли Вы этот поток на форуме Участника GWT...

В основном это запускается с той же проблемы, которую Вы определили, предлагает некоторые новые флаги компилятора и продолжает показывать, как использовать некоторый JSNI для обхождения бросков.

Редактирование В соединительной линии GWT там является новым флагом компилятора. Посмотрите Wiki...

1
ответ дан 7 December 2019 в 12:25
поделиться

Использование дженериков java 1.5 и подстановочных знаков могло избежать этого?

-1
ответ дан 7 December 2019 в 12:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: