Приведение с языком выражения - PullRequest
10 голосов
/ 18 октября 2011

Можно ли кастовать, используя EL?

У меня есть класс Vehicle и два других класса Car и Bus, которые расширяют Vehicle. Я ищу все транспортные средства, и есть некоторые данные, которые есть в автобусе, но нет в автомобиле.

Итак, я пытался показать вещи из машины, когда это машина, и вещи из автобуса, когда это автобус.

Как я мог это сделать, Каст, instanceof? И как бы я это сделал, потому что я вроде как потерянный здесь.

Спасибо

Ответы [ 2 ]

9 голосов
/ 18 октября 2011

Вы можете использовать ${obj.class.simpleName == 'Car'}, но это не лучшая вещь.

Возможно, вы можете иметь geType() абстрактный метод и использовать его для дифференциации.Например:

<c:forEach items="${vehicles}" var="vehicle">
   Reg.No: ${vehicle.registrationPlateNumber}
   <c:if test="${vehicle.type == 'bus'}">
      Toilets: ${vehicle.toilets}
   </c:if>
</c:forEach>
0 голосов
/ 18 октября 2011

вы сделаете это, расширив автомобиль и автобус от класса транспортного средства (так как транспортное средство будет родительским классом). Например

public class Vehicle {
   public void speed(){
   // some code
  }
}
public class Car extends Vehicle {
    public void speed(){
    // some code
   }
}
public class Bus extends Vehicle {
   public void speed(){
    // some code
   }
}

теперь вы можете проверить, запуская их или получая такую ​​погоду, это экземпляр транспортного средства, не использующего ключевое слово instanceOf.

т.е.

if(new car() instanceOf Vehicle){
//somecode
}
...