ÈȵãÌÖÂÛ£ºJava±à³Ì·ç¸ñµÄ¸Ä±ä
×î½üStephan SchmidtÔÚ²©¿ÍÖз¢±íÁËÌâΪ¡¶ÏÂÒ»´úJava±à³Ì·ç¸ñ¡·µÄÎÄÕ£¬²ûÊöÁËËûÑÛÖÐJava±à³Ì·ç¸ñµÄ¸Ä±ä£¬ÒÔ¼°Î´À´µÄ×ßÏò£ºÐí¶à¹«Ë¾ºÍ¿ª·¢ÈËÔ±ÕýÔÚ´ÓJavaתÏòÆäËû±à³ÌÓïÑÔ£ºRuby¡¢Python¡¢Groovy¡¢Erlang»òScalaµÈµÈ¡£²»¹ýÄã¿ÉÄÜ×ö²»µ½ÕâÒ» µã¡£¼´±ãÈç´Ë£¬ÄãÒ²¿ÉÒԸıäÄãµÄ±à³Ì·ç¸ñ£¬»ñÈ¡ÕâЩÐÂÓïÑÔµÄÓÅÊÆ¡£ÊÂʵÉÏ£¬ÔÚ¹ýÈ¥µÄ15ÄêÖУ¬Java±à³Ì·ç¸ñÒ²ÒѾÓÐÃ÷ÏԱ仯ÁË¡£
StephanÔÚÎÄÕÂÖÐÌá³öÁËÒÔϼ¸µã£º
¾¡¿ÉÄܵرê×¢final£ºÈÃËùÓж«Î÷²»¿É±ä£¬°Ñ±äÁ¿±êΪfinal¿ÉÒÔ×èÖ¹¸Ä±äËüµÄÖµ¡£ºÜ¶àʱºò£¬ÖØÐÂΪ±äÁ¿¸³Öµ»áÒýÈëbug£¬ÄãÓ¦¸ÃʹÓÃеıäÁ¿¡£³ý´ËÖ®Í⣬final¿ÉÒÔÌá¸ß´úÂëµÄ¿É¶ÁÐÔ¡£ÎÒÕë¶ÔÕâ¸ö»°Ì⻹д¹ýһƪÎÄÕ£º¡¶JavaÖÐËùÓбäÁ¿¶¼Ó¦¸ÃÊÇfinalµÄ¡·
ûÓÐsetter£ºÐí¶àJava³ÌÐòÔ±»á×ÔÈ»¶øÈ»µØÎªÀàÖÐËùÓеÄ×ֶμÓÉÏsetter¡£Ë¼¿¼Ò»Ï£¬ÕæµÄÿ¸ö×ֶζ¼ÐèÒªÐÞ¸ÄÂ𣿸üºÃµÄ·½·¨ÊÇ´´½¨°üº¬¸Ä±äºó״̬µÄжÔÏó¡£´ËÍ⣬ҲÊÔ×ÅÈ¥³ýgetter£¬ÎÒÃÇÓ¦¸Ã×ñÑ“Tell, don’t ask”µÄ˼Ïë¡£
±ÜÃâʹÓÃÑ»·À´²Ù×÷List£º´Óº¯Êýʽ±à³ÌÄÇÀï»ñµÃµÄ¾Ñ飬ѻ·²¢²»ÊǽøÐм¯ºÏ²Ù×÷×îºÃ·½·¨¡£ÀýÈ磬ÎÒÃÇ¿ÉÒÔʹÓÃGoogle CollectionsÌṩµÄ¹ýÂ˹¦ÄÜ¡£
Predicate canDrinkBeer = new Predicate() {
public boolean apply(HasAge hasAge) {
return hasAge.isOlderThan( 16 );
}
};
List<Person> beerDrinkers = filter(persons, canDrinkBeer);
ʹÓõ¥ÐдúÂ룺JavaÊÇÒ»ÃÅ·±ÔÓ£¨noisy£©µÄÓïÑÔ£¬ÎÒÃÇÓ¦¸Ã±àд¸ü¾«È·µÄ´úÂë¡£³¢ÊÔ½«´úÂëдΪһÐС£ÀýÈ磺
public int add(int a, int b) { return a + b; }
ʹÓôóÁ¿½Ó¿Ú£ºÁìÓòÇý¶¯Éè¼ÆÒѾ´óÐÐÆäµÀ£¬Ò»¸öÓ¦¸Ã²ð·ÖΪ¶àÖÖ“½ÇÉ«”£¬¼´ÊµÏÖ¶àÖÖ½Ó¿Ú£¬Ìá¸ß¸´Óó̶ȡ£·½·¨Ó¦¸ÃÃæÏò“½ÇÉ«”£¬¶ø²»ÊÇÃæÏòÌØ¶¨µÄÀà¡£ÎÒÔÚ¡¶²»ÒªÔÚJavaÖÐʹÓÃString¡·Ò»ÎÄÖÐÌÖÂÛÁ˸ü¶àÕâ·½ÃæµÄÄÚÈÝ¡£
ʹÓÃErlang·ç¸ñµÄ²¢·¢£ºJavaµÄ²¢·¢ÌØÐÔ£¨ÈçlockºÍsynchronized£©¹ýÓڵͶˣ¬ÄÑÒÔʹÓá£Erlang·ç¸ñµÄ²¢·¢ÊÇÒ»ÖÖ¸üºÃµÄ×ö·¨¡£Javaƽ̨ÉÏÒѾÓÐÁËAkkaºÍActorom¡£´ËÍ⣬Ҳ¿ÉÒÔʹÓÃjava.util.concurrentÖеÄJoin/ForkºÍÊý¾Ý½á¹¹½øÐбà³Ì¡£
ʹÓÃFluent Interface£ºFluent Interface¿ÉÒÔʹ´úÂë¸ü¶Ì£¬¸üÈÝÒ×±àд¡£Google CollectionsÖеÄMapMakerÊǸö²»´íµÄʾÀý£º
ConcurrentMap graphs = new MapMaker()
.concurrencyLevel(32)
.softKeys()
.weakValues()
.expiration(3
Ïà¹ØÎĵµ£º
ͨ¹ý¼àÌýÆ÷£¨Listener£©ºÍ¶¨Ê±Æ÷£¨Timer£©¶¨Ê±Ö´ÐÐij¸öÈÎÎñ£¨Task£©¡£
(1)Listener
import
java.util.Timer;
import
javax.servlet.ServletContextEvent;
import
javax.servlet.ServletContextListener;
public
class
MyListener
implements
ServletContextListener {
p ......
Êý×éÊÇJavaÓïÑÔÄÚÖõÄÀàÐÍ£¬³ý´ËÖ®Í⣬JavaÓжàÖÖ±£´æ¶ÔÏóÒýÓõķ½Ê½¡£JavaÀà¿âÌṩÁËÒ»Ì×Ï൱ÍêÕûµÄÈÝÆ÷À࣬ʹÓÃÕâЩÀàµÄ·½·¨¿ÉÒÔ±£´æºÍ²Ù×ݶÔÏó¡£ÏÂÃæ·Ö±ð½øÐÐÌÖÂÛ£¬ÔÚÑо¿JavaÈÝÆ÷Àà֮ǰ£¬ÏÈÁ˽âÒ»ÏÂJavaÊý×éµÄ»ù±¾¹¦ÄܺÍÌØÐÔ¡£
1. Êý×éµÄ»ù±¾ÌØÐÔ
Êý×éÓëÆäËüÖÖÀàµÄÈÝÆ÷(List/Set/Map)Ö®¼äµÄÇø±ðÔÚÓÚЧÂÊ¡¢È ......
package net.java2000.tools;
/**
* Title: Java Bean ¹¤¾ß
* Description:
* Copyright: Copyright (c) 2001
* Company: JAVAÊÀ¼ÍÍø
* @author ÕÔѧÇì
* @version 1.0
*/
import java.util.*;
import ......
×î½ü¶ÔspringÔ´Âë¸ÐÐËȤ£¬½ñÌì¿´µ½annotation²¿·Ö£¬ÂÔ¼ÇÖ®¡£
Ò». ×î³£¼ûµÄannotation
@Override:ÓÃÔÚ·½·¨Ö®ÉÏ£¬ÓÃÀ´¸æËß±ðÈËÕâÒ»¸ö·½·¨ÊǸÄд¸¸ÀàµÄ
@Deprecated:½¨Òé±ðÈ˲»ÒªÊ¹ÓþɵÄAPIµÄʱºòÓõÄ,±àÒëµÄʱºò»áÓòúÉú¾¯¸æÐÅÏ¢,¿ÉÒÔÉ趨ÔÚ³ÌÐòÀïµÄËùÓеÄÔªËØÉÏ.
@SuppressWarnings:ÔÝʱ°ÑһЩ¾¯¸æÐÅÏ¢ÏûÏ¢¹Ø±Õ
@En ......