Java匿名类迁移至JSP编译报错的替代实现方案咨询
方案1:Java8环境优先用Lambda表达式(仅适用于IReader为函数式接口,即仅包含一个抽象方法)
该方案改动量最小,替换原有匿名类写法即可,也不会触发JSP解析器的大括号匹配错误:
<% IReader reader = () -> new SomeClass(); %>
如果createNode方法有入参,对应补充参数即可,比如存在String类型入参时可写为(param) -> new SomeClass(param)。
方案2:在JSP声明块定义具名实现类
如果IReader不是函数式接口、无法使用Lambda,可以把匿名类改为具名实现类,放在JSP的声明块(<%! %>)中,声明块专门用于定义JSP页面级的类、方法和成员变量,不会触发解析器的语法识别bug:
<%! // 页面级自定义Reader实现类 class CustomSomeReader extends SomeReader<SomeClass> { @Override protected SomeClass createNode() { return new SomeClass(); } } %>
在业务逻辑脚本段直接实例化即可:
<% IReader reader = new CustomSomeReader(); // 原有后续逻辑保持不变 %>
方案3:抽离为独立Java工具类(最稳妥,推荐长期维护使用)
老旧项目尽量不要把复杂Java逻辑散在JSP文件中,你可以直接把该Reader的实现逻辑写到项目源码目录的独立Java类中,编译后JSP里直接引用即可,完全规避JSP解析的各类语法坑,后续修改维护也更方便。
内容的提问来源于stack exchange,提问作者Ajit Panigrahi
相关产品推荐
相关产品推荐

