gpt4 book ai didi

java - 使用 EL 向下转换

转载 作者:行者123 更新时间:2023-11-29 05:40:15 25 4
gpt4 key购买 nike

给定以下代码:

//super class

public class SuperClass {
protected String name;
public SuperClass(String name){
this.name = name;
}
public String getData(){
return "superclass" + name;
}
}

//subclass

public class SubClass extends SuperClass {

private String version;
public SubClass(String name) {
super(name);
}
public String getData() {
return "subclass" + name;
}
public String getVersion(){
return version;
}
}

我想要的是使用 EL 和 JSTL 代码在我的 jsp 文件中获取版本(使用子类的 getVersion() 方法):

<c:forEach items="${listSuperClass}" var = "element">
${element.version}
</c:forEach>

那么如何在这个JSTL标签中进行向下转换呢?

最佳答案

你不需要沮丧。 EL(note: EL, not JSTL!)使用reflection找到方法。如果它不存在,那么它只会抛出一个 PropertyNotFoundException。 .


更新:如果那个又是你的实际问题(因此你错误地认为“在 JSTL 中向下转型”会以某种方式成为正确的解决方案,因此你基本上问错了问题),那么你应该以不同的方式解决它:

  1. 只是不要在一个集合中混合不同的类型。

  2. 把它放在 <c:catch> 中并吞下异常。

    <c:catch var="e">
    ${element.version}
    </c:catch>

    然而,这是糟糕的设计。

  3. <c:if> 中确定实例的实际类型.

    <c:if test="${element['class'].simpleName == 'SubClass'}">
    ${element.version}
    </c:if>

    更好的做法是像abstract Type getType() 那样抽象它返回所需的枚举:

    <c:if test="${element.type == 'VERSIONABLE'}">
    ${element.version}
    </c:if>

关于java - 使用 EL 向下转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17883098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com