示例一:
package com; interface Operation { double operateTwoIntNum(int a, int b); } public class InnerClassTest { /** * 加法 */ public static double add(int a, int b) { /** * 匿名內部類實現加法 */ double c = new Operation() { @Override public double operateTwoIntNum(int a, int b) { return a + b; } }.operateTwoIntNum(a, b); return c; } /** * 減法 * @param a * @param b * @return */ public static double subtract(int a, int b) { /** * 匿名內部類實現加法 */ double c = new Operation() { @Override public double operateTwoIntNum(int a, int b) { // TODO Auto-generated method stub return a - b; } }.operateTwoIntNum(a, b); return c; } public static void main(String[] args) { System.out.println(add(10, 3)); System.out.println(subtract(10, 3)); } }
示例二: 這是我們工程中匿名內部類在分頁方法中的運用,動態拼接分頁鏈接地址:
public interface LinkBuilder { public StringBuffer getPagerUrl(); //public void setPage(int page); public StringBuffer getPageUrl(int page); } public abstract class AbstractLinkBuilder implements LinkBuilder { @Override public 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() {@Override public 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 String getUrl(int page) { return staticTool.process(this.linkBuilder.getPageUrl(page).toString()); } }
示例三: 上篇博客中用策略模式改善dao層代碼中有使用。
聲明:ITeye文章版權屬於作者,受法律保護。沒有作者書面許可不得轉載。
推薦鏈接
|
|
返回頂樓 | |
發表時間:2011-11-19
剛好也不是太了解什么場景下應該使用匿名內部類,正好可以學習下,加深一下了解!
|
|
返回頂樓 | |
發表時間:2011-11-21 最后修改:2011-11-21
在java8出來之前,內部類最本質的作用是可以訪問外部對象的狀態和外部方法的final變量。換言之,模擬閉包。
其它特性都是單純節省代碼量,只有這個作用是暫時無法替代的。 |
|
返回頂樓 | |
發表時間:2011-11-21
如果看一下,SWING的各中事件管理,你就OK了
|
|
返回頂樓 | |
發表時間:2011-11-21
kidneyball 寫道
在java8出來之前,內部類最本質的作用是可以訪問外部對象的狀態和外部方法的final變量。換言之,模擬閉包。
其它特性都是單純節省代碼量,只有這個作用是暫時無法替代的。 ![]() |
|
返回頂樓 | |
發表時間:2011-11-21
lz給出的第一個實例,是回調的使用
第二個實例,是事件監聽機制的使用。 可多看看基於事件監聽的框架就明白怎么使用了。 另外,可考慮在只會使用到一次,並且邏輯不復雜的地方使用。 |
|
返回頂樓 | |
發表時間:2011-11-21 最后修改:2011-11-21
kidneyball 寫道
在java8出來之前,內部類最本質的作用是可以訪問外部對象的狀態和外部方法的final變量。換言之,模擬閉包。
其它特性都是單純節省代碼量,只有這個作用是暫時無法替代的。 +1 說得很簡潔,一語中的。偶像啊。 |
|
返回頂樓 | |
發表時間:2011-11-21
java的集合使用了private的Iterator類.這樣可以保證你只能獲取iterator()方法返回的iterator接口,而無法得到具體實現類
|
|
返回頂樓 | |
發表時間:2011-11-21
kidneyball 寫道
在java8出來之前,內部類最本質的作用是可以訪問外部對象的狀態和外部方法的final變量。換言之,模擬閉包。
其它特性都是單純節省代碼量,只有這個作用是暫時無法替代的。 嗯,還有一種作用,private的static內部類提供了一種“類私有”的可見性,而private的非static內部類提供了“對象私有”的可見性,這也是暫時在java里沒有替代方案的(scala里就有)。 |
|
返回頂樓 | |
發表時間:2011-11-22
kidneyball 寫道
kidneyball 寫道
在java8出來之前,內部類最本質的作用是可以訪問外部對象的狀態和外部方法的final變量。換言之,模擬閉包。
其它特性都是單純節省代碼量,只有這個作用是暫時無法替代的。 嗯,還有一種作用,private的static內部類提供了一種“類私有”的可見性,而private的非static內部類提供了“對象私有”的可見性,這也是暫時在java里沒有替代方案的(scala里就有)。 弱弱的問一句,final變量的訪問跟匿名內部類有什么關系? |