Java寮傚父鏈夊鎱紵,Java慢?
Java寮傚父鏈夊鎱紵,Java慢?
鏈枃鏄洖绛?a href="http://stackoverflow.com/q/299068/315943" class="external" rel="nofollow" target="_blank">StackOverflow涓婄殑闂锛屼絾鍥犱负鍐欏お闀夸簡锛屾墍浠ュ氨鍙戝埌杩欓噷浜嗐€?/p>
瀹為檯涓婏紝鐪熸瑕佽璁虹殑闂骞朵笉鏄紝鈥滅浉瀵光€橀偅浜涗笉浼氬彂鐢熼敊璇殑浠g爜鈥欐潵璇达紝鈥橀偅浜涗互寮傚父褰㈠紡涓婃姤鐨勯敊璇€欎細鏈夊鎱紵鈥濓紝鍥犱负浣犲彲鑳戒篃璁ゅ悓鈥滃凡鎺ュ彈鐨勫洖绛斺€?/a>銆傜浉鍙嶏紝鐪熸鐨勯棶棰樻槸锛屸€滅浉瀵光€橀偅浜涗互鍏朵粬褰㈠紡涓婃姤鐨勯敊璇€欐潵璇达紝鈥橀偅浜涗互寮傚父褰㈠紡涓婃姤鐨勯敊璇€欎細鏈夊鎱紵鈥?span id="more-1480">
閫氬父璁や负锛屸€滀笉瑕佹姏鍑轰綘鎯宠鎹曡幏鐨勫紓甯糕€濄€傛墍浠ワ紝鎶涘嚭涓€涓叾浠栦汉鈥斺€斿骞冲彴鎴栨鏋禔PI鈥斺€旇鎹曡幏鐨勫紓甯告槸鍚堥€傜殑銆傛垨鑰呭湪缂栧啓涓€浜涘伐鍏稟PI鏃讹紝鎶涘嚭寮傚父涔熷彲浠ョ殑锛屽鏃ュ織璁板綍鎴栨秷鎭彂閫侊紝杩欎簺鎿嶄綔闇€瑕佸鐞嗗閮ㄨ櫄鎷熸満鐨勯敊璇紝渚嬪鏂囦欢IO鎴栫綉缁淚O閿欒銆?/p>
杩欐槸閫傚悎鎶涘嚭寮傚父鐨勪緥瀛愶紝搴旇娌℃湁浜轰細鍦ㄨ繖浜涗緥瀛愪笂鏈変簤璁€傜幇鍦紝鐪嬩竴涓嬬畝鍗曟柟娉曚腑鍑虹幇閿欒鏃朵細鍙戠敓浠€涔堛€傚亣璁炬柟娉曠鍚嶅涓嬶細
/** * Transforms SomeClass into SomeOtherClass. * @param input some class instance * @return the transformed instance, * or null if the transformation was unsuccessful */ public SomeOtherClass transform(SomeClass input)
璋冪敤璇ユ柟娉曠殑浠g爜濡備笅鎵€绀猴細
SomeClass input = ... // get the input from somewhere SomeOtherClass result = transform(input); if(result == null) { // handle the failure } else { // use the result }
浣嗙幇鍦紝褰撴柟娉曡繑鍥瀗ull鏃讹紝鎴戜滑鎯崇煡閬撳摢閲屽嚭鐜伴敊璇簡銆傜畝鍗曟潵璇村彲浠ヨ繖鏍凤細
/** * Transforms SomeClass into SomeOtherClass. * @param input some class instance * @return the transformed instance, never null * @throws TransformationException on failure */ public SomeOtherClass transform(SomeClass input) throws TransformationException
涓轰簡瀹炵幇杩欎釜鍔熻兘锛屼綘闇€瑕佸皢鈥渞eturn null鈥濇敼涓衡€渞eturn new TransformationException(鈥渞eason鈥?;鈥濄€傝皟鐢ㄦ柟娉曢渶瑕佸仛鏀瑰姩涔堬紵
SomeClass input = ... // get the input from somewhere try { SomeOtherClass result = transform(input); // use the result } catch(TransformationException e) { // handle the failure }
娌℃湁浜轰細鍘昏涓婇潰鐨勪唬鐮佸潡锛屾病浠€涔堟剰涔夈€傛墍浠ヤ篃娌′粈涔堝彲鎯婅鐨勩€備綘鍙兘姣忓ぉ閮藉湪鍐欑被浼肩殑浠g爜锛屼絾涔熻涓嶄笂鏄€滀唬鐮佸紓鍛斥€濄€傚彲鏄紝灏嗘潵浣犱細鏄庣櫧鍦ㄢ€滃凡棰勬枡鍒扳€濈殑閿欒涓婁娇鐢ㄥ紓甯告槸澶氫箞澶х殑閿欒鍋囪鏈変竴澶╀綘寮€濮嬭鍒板湪鈥滃凡棰勬枡鍒扳€濈殑閿欒涓婁娇鐢ㄥ紓甯告槸闈炲父涓嶅ソ鐨勩€傜幇鍦紝鎹曡幏鈥滄湭棰勬枡鍒扳€濆紓甯告槸闈炲父鍙瑧鐨勶紝鍥犱负缂栧啓catch浠g爜鍧楋紝骞舵樉寮忕殑澶勭悊寮傚父鏈韩灏辨槸棰勬枡鍒颁細鏈夊紓甯搞€備絾娌″叧绯伙紝鎴戜滑杩樺彲浠ヤ慨鏀逛唬鐮佹敼鍙樿繖绉嶇獦澧冦€備簬鏄紝鎴戜滑閫€鍥炲埌浜咰璇█鏃朵唬锛岃繑鍥炰竴涓紓甯稿€兼潵琛ㄧず閿欒銆?/p>
/** * Transforms SomeClass into SomeOtherClass. * @param input some class instance * @return the SomeOtherClass instance or, * if the transform fails, a TransformFailure instance */ public Object transform(SomeClass input)
浜庢槸锛岃皟鐢ㄩ儴鍒嗙殑浠g爜涔熶笉寰椾笉濂囪懇涓€浜涳細
SomeClass input = ... // get the input from somewhere Object result = transform(input); if(result instanceof SomeOtherClass) { SomeOtherClass success = (SomeOtherClass)result; // use the result } else { TransformFailure failure = (TransformFailure)result; // handle the failure }
鎵€浠ワ紝濡傛灉浣犺鐫€浣跨敤寮傚父鏈変唬鐮佸紓鍛筹紝浣嗗彲浠ユ帴鍙楁墦鐮寸被鍨嬪畨鍏紝閭d箞浣犳渶缁堣闈㈠鐨勬槸闅句互缁存姢锛屾病娉曚娇鐢紝浠呬粎姣斿熀浜庡紓甯哥殑瑙e喅鏂规蹇袱鍊嶇殑浠g爜銆備絾鏄綘鍙堜笉鑳芥帴鍙楃被鍨嬪畨鍏ㄨ鐮村潖锛屽洜涓鸿繖2鍊嶇殑鎬ц兘鎻愬崌杩樻湭琚瘉鏄庯紝鐜板湪灏辩敤瀹炲湪澶瞾鑾姐€傛墍浠ワ紝浣犲喅瀹氫娇鐢ㄧ粨鏋滃璞★紝鑰屼笉鏄繑鍥炲紓甯稿€笺€?/p>
/** * Transforms SomeClass into SomeOtherClass. * @param input some class instance * @return the TransformResult instance */ public TransformResult transform(SomeClass input)
鐜板湪锛岀浉搴斿湴锛岃皟鐢ㄩ儴鍒嗙殑浠g爜鍙樻垚浜嗚繖鏍凤細
SomeClass input = ... // get the input from somewhere TransformResult result = transform(input); if(result.isSuccess()) { SomeOtherClass success = result.getSuccess(); // use the result } else { TransformFailure failure = result.getFailure(); // handle the failure }
鐜板湪锛屾垜浠湁浜嗕竴涓殣鏅︼紝浣嗗彲绠$悊鐨勮В鍐虫柟妗堛€傚彲鏄紝瀹冩瘮浣跨敤寮傚父鐨勭涓€涓柟妗堟參2鍊嶏紝鍗充娇浣犲皢TransformResult鍜孴ransformFailure鍚堝苟涔熸槸涓€鏍风殑銆傚啀璇存槑涓€閬嶏紝浣跨敤缁撴灉瀵硅薄姣斾娇鐢ㄥ紓甯告參锛屽嵆浣垮湪璋冪敤杩囩▼涓彂鐢熶簡閿欒銆傛瘡娆′綘閮介渶瑕佸垱寤轰竴涓柊鐨勭粨鏋滃璞★紝杩欐病浠€涔堝疄闄呮剰涔夛紝鑰屽紓甯稿璞″彧鍦ㄥ彂鐢熼敊璇殑鏃跺€欐墠浼氬垱寤恒€?/p>
瀵逛簬寮傚父锛岃繕鏈変竴涓璁ㄨ鐨勫湴鏂广€傚亣璁炬湁浜哄湪浣跨敤鏂规硶transform鏃讹紝娌℃湁璁ょ湡鐪媕avadoc銆傚湪浣跨敤寮傚父鐨勪緥瀛愪腑锛屼細鏈変笅闈㈢殑浠g爜锛?/p>
SomeClass input = ... // get the input from somewhere SomeOtherClass result = transform(input); // use the result
鍦ㄤ娇鐢ㄥ紓甯哥殑渚嬪瓙涓紝浠栦滑鐭ラ亾杩斿洖鍊肩殑绫诲瀷锛屼互鍙婃槸鍚︿竴涓€滃凡妫€鏌ュ紓甯糕€濓紝浠栦滑鍙兘浼氬緱鍒颁竴涓紪璇戞椂閿欒锛屾垨鑰呬粬浠細鍦╰hrows璇彞涓0鏄庣浉搴旂殑寮傚父銆傚嵆浣挎槸鈥滄湭妫€鏌ュ紓甯糕€濓紝閿欒浼氫紶閫掑埌涓婂眰璋冪敤銆傜幇鍦紝鑰冭檻浣跨敤寮傚父杩斿洖鍊肩殑渚嬪瓙锛?/p>
SomeClass input = ... // get the input from somewhere SomeOtherClass result = (SomeOtherClass)transform(input); // use the result
杩欎釜绮楀績鐨勭敤鎴峰啓鐨勪唬鐮佺湅璧锋潵鎸烘紓浜紝浣嗗綋杩愯杩囩▼涓彂鐢熼敊璇椂锛屽氨婊′笉鏄偅涔堝洖浜嬩簡銆傞偅鏃讹紝浣犺垂灏藉姏姘旀彁渚涚殑閿欒淇℃伅浼氬洜涓哄彂鐢熶簡ClassCastException寮傚父涓哄叏閮ㄤ涪澶便€備娇鐢ㄧ粨鏋滃璞′篃涓嶄細濂藉埌鍝幓銆?/p>
SomeClass input = ... // get the input from somewhere SomeOtherClass result = transform(input).getSuccess(); // use the result
鍐嶈涓€閬嶏紝涓婇潰鐨勪唬鐮佺湅鏉ョ浉褰撴甯搞€傚鏋滀粬浠洸鐩娇鐢ㄦ湰鏂囦腑缁欏嚭鐨勭涓€涓柟娉曪紝閭d箞鍦ㄧ▼搴忚繍琛岃繃绋嬩腑锛岃偗瀹氫細鍑虹幇NullPointerException寮傚父銆?/p>
杩欓噷涓昏鎯宠鐨勬槸锛屽鐞嗛€昏緫閿欒鏃讹紝浣跨敤寮傚父鐨勪緥瀛愬彲浠ユ寜棰勬兂鐨勬柟寮忔甯稿伐浣滐紝鎶ュ憡閿欒淇℃伅銆備絾鏄叾浠栫殑瑙e喅鏂规鍗翠細浜х敓涓€浜涙病鐢ㄧ殑寮傚父锛屽嵆浣夸綘宸茬粡姝g‘灏嗚蒋浠堕噸鏂伴儴缃蹭簡涓€閬嶏紝瀹冧粛鐒朵細鍑洪敊锛屽彧鏈夎繖鏃讹紝浣犳墠鑳藉緱鍒伴敊璇俊鎭€?/p>
鎵€浠ワ紝鍞竴绗﹀悎閫昏緫鎬х殑缁撹鏄紝濡傛灉浣犳兂涓婃姤閿欒淇℃伅锛岄偅涔堝氨搴旇浣跨敤寮傚父銆傚畠姣旂粨鏋滃璞℃€ц兘楂橈紝姣斿紓甯歌繑鍥炲€煎畨鍏紝鑰屼笖杩愯绋冲畾銆?/p>
鏇存柊浜?012-12-19 19锛?3
鎰熻阿pony鎸囧嚭鐨勮瘧鏂囦腑鐨勯敊璇€?/p>
聽鑻辨枃鍘熸枃锛?a href="http://blog.fuwjax.org/2011/04/how-slow-are-java-exceptions/" target="_blank" class="external" rel="nofollow">How聽slow are Java Exception锛岀炕璇戯細Wld5聽-聽鏇规棴涓?/a>
璇戞枃閾炬帴锛?a href="http://www.wld5.com/1480.html">http://www.wld5.com/1480.html
銆愬闇€杞浇锛岃鍦ㄦ鏂囦腑鏍囨敞骞朵繚鐣欏師鏂囬摼鎺ャ€佽瘧鏂囬摼鎺ュ拰璇戣€呯瓑淇℃伅锛岃阿璋㈠悎浣滐紒銆?/span>
相关文章
- 暂无相关文章
用户点评