java匿名内部类使用场景列举
java内部类是怎么一回事?匿名内部类何时会用到,之前一直很模糊,昨天看了几个例子,心里开始慢慢清晰了关于匿名内部类的用法。
补充:
以前看到,发布后的工程中,一个java类,生成了几个带标号的.class文件,形如:
CouponAgentListAction.class,CouponAgentListAction$1.class,CouponAgentListAction$2.class.而更新的时候,如果只更新不带标号的.class,可能会出现问题。一直不知道什么原因。今天测试匿名内部类,发现,之所以生成带$的class文件,是因为类中使用了匿名类,使用了几个匿名类,就将生成几个带$的文件,发布工程的时候应该连同带$的文件一齐发布。
示例一:
public interface LinkBuilder {public StringBuffer getPagerUrl();//public void setPage(int page);public StringBuffer getPageUrl(int page);}public abstract class AbstractLinkBuilder implements LinkBuilder {@Overridepublic final StringBuffer getPageUrl(int page) {StringBuffer url = new StringBuffer(XssFilterService.dhtmlSpecialchars(this.getPagerUrl(), true));if (url.toString().indexOf("?") > 0) {url.append("&");} else {url.append("?");}url.append("page=").append(page);return url;}}--------------调用分页标签时根据需要拼接链接地址--------------------------------Pager pager = Pager.register("newPagerWidget",new AbstractLinkBuilder() {@Overridepublic StringBuffer getPagerUrl() {StringBuffer url = null;if (queryAgentStore != null) {url = new StringBuffer("agentstorelist.html?");if (StringUtils.isNotBlank(queryAgentStore.getStoreName()))// 店铺关键字{url.append("&queryAgentStore.storeName="+ XssFilterService.dhtmlSpecialchars(queryAgentStore.getStoreName()));}if (queryAgentStore.getCity()!=null)// 城市编码{url.append("&queryAgentStore.city="+ queryAgentStore.getCity());}if(orderByClause!=null&&!"".equals(orderByClause)){url.append("&orderByClause="+orderByClause);}} else {url = new StringBuffer("agentstorelist.html");}return url;}}, request);--------------调用分页标签时根据需要拼接链接地址--------------------------------public class Pager{public Pager(LinkBuilder builder) {this.linkBuilder = builder;}public static Pager register(String name, LinkBuilder builder,HttpServletRequest request) {Pager pager = new Pager(builder);PagerDTO dto = PagerDTO.get(request);dto.add(name, pager);return pager;}public String getUrl(int page) {return staticTool.process(this.linkBuilder.getPageUrl(page).toString());}}
示例三:
上篇博客中用策略模式改善dao层代码中有使用。