﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-semi-sleep-随笔分类-java</title><link>http://www.blogjava.net/semi-sleep/category/18357.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 03 Mar 2007 04:42:17 GMT</lastBuildDate><pubDate>Sat, 03 Mar 2007 04:42:17 GMT</pubDate><ttl>60</ttl><item><title>对javax.swing.undo包的总结</title><link>http://www.blogjava.net/semi-sleep/archive/2006/12/14/87772.html</link><dc:creator>semi-sleep</dc:creator><author>semi-sleep</author><pubDate>Thu, 14 Dec 2006 10:36:00 GMT</pubDate><guid>http://www.blogjava.net/semi-sleep/archive/2006/12/14/87772.html</guid><wfw:comment>http://www.blogjava.net/semi-sleep/comments/87772.html</wfw:comment><comments>http://www.blogjava.net/semi-sleep/archive/2006/12/14/87772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/semi-sleep/comments/commentRss/87772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/semi-sleep/services/trackbacks/87772.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">/* UndoableEdit and AbstractUndoableEdit */<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">AbstractUndoableEdit edit = new AbstractUndoableEdit();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// methods fall into 3 categories<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// 1.undoable operations<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// if the alive field is false, all operation fail<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// the hasBeenDone field affect the behaviours of canUndo and canRedo method<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">if (edit.canUndo()) {<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">
												<span style="mso-tab-count: 1">       </span>edit.undo(); // the behaviour depends on canUndo<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">}<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">if (edit.canRedo()) {<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">
												<span style="mso-tab-count: 1">       </span>edit.redo(); // the behaviour depends on canRedo<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">}<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">edit.die(); // set alive to be false<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// 2.edit management<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">edit.isSignificant(); // if the edit affect model state, default implementation return false<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">edit.addEdit(null); // edit queued in some UndoableEditListener, and try to absorb another edit<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">edit.replaceEdit(null); // try to replace another edit queued in some UndoableEditListener<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// 3.representation<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">edit.getPresentationName();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// the following 2 methods use result of getPresentationName and add undo/redo text in UIManager<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">edit.getUndoPresentationName();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">edit.getRedoPresentationName();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">/* CompoundEdit */<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// implements the composition pattern, manages a set of edits<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">CompoundEdit compound = new CompoundEdit();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// undoable operations (except die) fail if inProgress is true<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// edit management methods (except isSignificant) fail if inProgress is false<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">compound.isInProgress();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">compound.end(); // set inProgress to be false<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// representation methods try to use information of the last edit<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">/* UndoManager */<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">UndoManager manager = new UndoManager();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// extends undoable operations when inProgress is true<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// undo/redo now stop at the latest significant edit<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// limit the maximal number of edits<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">manager.setLimit(0);<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">manager.getLimit();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">manager.discardAllEdits(); // clear all edits<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// extends representation methods when inProgress is true<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// undo/redo methods try to use information of the latest edit to be undo/redo<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// add undoOrRedo methods<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">if (manager.canUndoOrRedo()) {<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">
												<span style="mso-tab-count: 1">       </span>manager.undoOrRedo();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">}<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">manager.getUndoOrRedoPresentationName();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">/* StateEditable */<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// stateful object should be able to store and restore its state<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">StateEditable stateEditable = new StateEditable() {<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">
												<span style="mso-tab-count: 1">       </span>public void restoreState(Hashtable&lt;?, ?&gt; state) {}<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">
												<span style="mso-tab-count: 1">       </span>public void storeState(Hashtable&lt;Object, Object&gt; state) {}<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">};<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">/* StateEdit */<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// extends AbstractUndoableEdit to add the ability to use StateEditable<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// store pre-state <o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">StateEdit stateEdit = new StateEdit(stateEditable);<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// store post-state<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">stateEdit.end();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// restore the state of stateEditable<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">stateEdit.undo();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">stateEdit.redo();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">/* UndoableEditSupport */<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">UndoableEditSupport support = new UndoableEditSupport(new Object());<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// methods fall into 2 categories<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// 1.manage a set of UndoableEditListener<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">support.addUndoableEditListener(null);<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">support.removeUndoableEditListener(null);<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">support.getUndoableEditListeners();<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<o:p>
										<font face="Verdana" color="#003366"> </font>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// 2.send UndoableEditEvent<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// if updateLevel is 0, all UndoableEditEvent would be sent immediately<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// else UndoableEdit will be saved in CompoundUndoableEdit and wait util updateLevel change to 0<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">support.beginUpdate(); // increase updateLevel<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">// send UndoableEditEvent if updateLevel is 0 or save edit in CompoundUndoableEdit<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">support.postEdit(null);<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span class="Code1">
						<span lang="EN-US" style="FONT-SIZE: 7.5pt">
								<font color="#003366">
										<font face="Verdana">support.endUpdate(); // decrease unpdateLeve and send UndoableEditEvent if necessary<o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
<img src ="http://www.blogjava.net/semi-sleep/aggbug/87772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/semi-sleep/" target="_blank">semi-sleep</a> 2006-12-14 18:36 <a href="http://www.blogjava.net/semi-sleep/archive/2006/12/14/87772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对java 5除generic外的new features的总结</title><link>http://www.blogjava.net/semi-sleep/archive/2006/12/14/87678.html</link><dc:creator>semi-sleep</dc:creator><author>semi-sleep</author><pubDate>Thu, 14 Dec 2006 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/semi-sleep/archive/2006/12/14/87678.html</guid><wfw:comment>http://www.blogjava.net/semi-sleep/comments/87678.html</wfw:comment><comments>http://www.blogjava.net/semi-sleep/archive/2006/12/14/87678.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/semi-sleep/comments/commentRss/87678.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/semi-sleep/services/trackbacks/87678.html</trackback:ping><description><![CDATA[
		<h2 style="MARGIN: 13pt 0cm">
				<span lang="EN-US">
						<font face="Arial">The for-each loop</font>
				</span>
		</h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span class="Code1">
						<span lang="EN-US">
								<font color="#003366">
										<font face="Verdana">for (type_name variable_name : [instance of Iterable&lt;T&gt;] or [array]) {}<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></font>
								</font>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span>
				<span lang="EN-US">.net</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">foreach</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不同的是，</span>
				<span lang="EN-US">Iterable</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
				<span lang="EN-US">type parameter</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
				<span lang="EN-US">array</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
				<span lang="EN-US">element type</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须是</span>
				<span lang="EN-US">for</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中使用的</span>
				<span lang="EN-US">type</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者其子类。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以下情况不适合使用</span>
				<span lang="EN-US">foreach</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当需要删除或者替换</span>
				<span lang="EN-US">current element</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当需要同时访问一个以上的</span>
				<span lang="EN-US">Iterable&lt;T&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者</span>
				<span lang="EN-US">array</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时。</span>
		</p>
		<h2 style="MARGIN: 13pt 0cm">
				<span lang="EN-US">
						<font face="Arial">Autoboxing</font>
				</span>
		</h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一般的代码经常会使用</span>
				<span lang="EN-US">boxing</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span>
				<span lang="EN-US">unboxing</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">List list = new ArrayList();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">int i = 0;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">list.add(new Integer(i)); // boxing<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">i = ((Integer) list.get(0)).intValue(); // unboxing<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采用了</span>
				<span lang="EN-US">autoboxing</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之后，</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">能够自动在</span>
				<span lang="EN-US">primitive type</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它相应的</span>
				<span lang="EN-US">wrapper</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之间进行转换。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">// autoboxing<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">list.add(i);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">i = list.get(0);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以</span>
				<span lang="EN-US">Integer</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为例，以下几点是需要注意的：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当试图将值为</span>
				<span lang="EN-US">null</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">Integer</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">转为</span>
				<span lang="EN-US">int</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，会有</span>
				<span lang="EN-US">NullPointerException</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">int i = (Integer) null;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于</span>
				<span lang="EN-US">==</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作符，当它作用在</span>
				<span lang="EN-US">int</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上时是做值的比较，作用于</span>
				<span lang="EN-US">Integer</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上时是做</span>
				<span lang="EN-US">reference</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的比较。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">int i1 = 0;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">Integer i2 = new Integer(0);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">i1 == i2; // return true<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">i2 == i1; // return true<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">(Integer) i1 == i2; // return false<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果频繁使用</span>
				<span lang="EN-US">autoboxing</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将不利于代码的运行效率。</span>
		</p>
		<h2 style="MARGIN: 13pt 0cm">
				<span lang="EN-US">
						<font face="Arial">Enums</font>
				</span>
		</h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">public enum Test { // 1<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">A, B(1), C { public boolean test1() { return true; } } /* 5 */ ; // 2<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">private int i = 0;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">Test() {} // 3<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">private Test(int i) { this.i = i; } // 3<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">public boolean test1() { return false; } // 5<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">public boolean test2(Test test) { return test != A &amp;&amp; test !=B; } // 6<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">// 7<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">public boolean test3() {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">
						<span style="mso-tab-count: 1">      </span>switch (this) {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">case A: return false;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">case B: return false;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">default: return true;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">Enum</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟一般的类有很多相似之处，它们都能够实现多个接口，能够定义方法、类变量，除了这些相似点之外，</span>
				<span lang="EN-US">enum</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有如下的特性：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo3; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须使用</span>
				<span lang="EN-US">enum</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关键字来定义，不能用</span>
				<span lang="EN-US">extends</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定父类，假如</span>
				<span lang="EN-US">enum</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的名字为</span>
				<span lang="EN-US">Test</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则它自动继承</span>
				<span lang="EN-US">Enum&lt;Test&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。与此同时，</span>
				<span lang="EN-US">enum</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还自动实现</span>
				<span lang="EN-US">Serializable</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span>
				<span lang="EN-US">comparable</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口，并且自动重载了部分</span>
				<span lang="EN-US">Object</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方法。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo3; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所有的可用</span>
				<span lang="EN-US">enum constant</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须放在第一行，用逗号格开，以分号结束（如果后面没有其他的代码，则分号可以省略）。通过专门设计，使得</span>
				<span lang="EN-US">Serial form</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以支持后续新增的</span>
				<span lang="EN-US">enum constant</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo3; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以定义若干不同的构造函数，构造函数只能用</span>
				<span lang="EN-US">private</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修饰符（可以省略掉</span>
				<span lang="EN-US">private</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），当构造函数需要输入参数时，</span>
				<span lang="EN-US">enum constant</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的定义中必须提供这些参数的值。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo3; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">4.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">自动增加了</span>
				<span lang="EN-US">values()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">valueOf</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">Class&lt;T&gt;, String</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）、</span>
				<span lang="EN-US">valueOf(String)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">三个静态方法。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo3; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">5.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以为</span>
				<span lang="EN-US">enum constant</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义</span>
				<span lang="EN-US">constant-specific</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo3; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">6.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在代码中可以引用前面所定义的类型。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo3; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">7.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于</span>
				<span lang="EN-US">switch</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以应用于</span>
				<span lang="EN-US">int</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span>
				<span lang="EN-US">enum</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类型，在代码中可以使用</span>
				<span lang="EN-US">”switch (this) {…}”</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">语句。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo3; tab-stops: list 39.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">8.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">java.util</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有专为</span>
				<span lang="EN-US">enum</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设计的高效率的</span>
				<span lang="EN-US">EnumSet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span>
				<span lang="EN-US">EnumMap</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，其中</span>
				<span lang="EN-US">EnumSet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供对方法以使</span>
				<span lang="EN-US">enum</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">支持位与（</span>
				<span lang="EN-US">bit flags</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）操作。</span>
		</p>
		<h2 style="MARGIN: 13pt 0cm">
				<span lang="EN-US">
						<font face="Arial">Varargs</font>
				</span>
		</h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在方法的参数列表上，如果类型后面加上三个点，则表示该参数可能作为数组或者多个参数传入，如：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">public void test(int… arguments) {}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">…<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">test(1);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">test(1, 2, 3);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">test(new int[0]);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跟</span>
				<span lang="EN-US">.net</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类似的，</span>
				<span lang="EN-US">varargs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">必须作为方法的最后一个参数。如果对使用</span>
				<span lang="EN-US">varargs</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方法进行重载，则在调用该方法时，有可能</span>
				<span lang="EN-US">compiler</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无法识别代码究竟调用的是哪个方法，此时会有编译错误。</span>
		</p>
		<h2 style="MARGIN: 13pt 0cm">
				<span lang="EN-US">
						<font face="Arial">Static Import</font>
				</span>
		</h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">Static import</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用来</span>
				<span lang="EN-US">import</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类中的静态变量或静态方法，使用了</span>
				<span lang="EN-US">static import</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之后，这些使用这些静态变量和静态方法时将不需要使用类名。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">import static java.lang.Math.PI;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">import static java.lang.Math.*;<o:p></o:p></span>
		</p>
		<h2 style="MARGIN: 13pt 0cm">
				<span lang="EN-US">
						<font face="Arial">Annotations</font>
				</span>
		</h2>
		<h3 style="MARGIN: 13pt 0cm">
				<font size="3">
						<span lang="EN-US">Annotation</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的定义</span>
				</font>
		</h3>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">public @interface Test {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">
						<span style="mso-tab-count: 1">      </span>int value();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">
						<span style="mso-tab-count: 1">      </span>String name() default “test”;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span>
				<span lang="EN-US">@interface</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关键字。</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">能使用的类型为</span>
				<span lang="EN-US">primitive</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">String</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">Class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">enums</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及以以上类型为</span>
				<span lang="EN-US">element type</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数组。使用</span>
				<span lang="EN-US">default</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关键字能够设定默认值，默认值必须是</span>
				<span lang="EN-US">compile time constants</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">Annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的使用的语法跟</span>
				<span lang="EN-US">java doc</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的语法相似，为了区分这两者，</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的命名不能使用已有的</span>
				<span lang="EN-US">java doc</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中所用的名字。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">java.lang.annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中存在若干</span>
				<span lang="EN-US">mata-annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，用于</span>
				<span lang="EN-US">annotate</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其他的</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<h3 style="MARGIN: 13pt 0cm">
				<font size="3">
						<span lang="EN-US">Annotation</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的使用</span>
				</font>
		</h3>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先，必须</span>
				<span lang="EN-US">import annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所在的包，</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以放在在任何</span>
				<span lang="EN-US">static</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">public</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">final</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关键字可以使用的地方，建议把</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">放在最前面。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">@Test(value=0)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">public class A {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">@Test(Value=0, name=”abc”) public void test(@Test(0) Object o) {}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="COLOR: #003366; FONT-FAMILY: Verdana">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中各个变量的赋值作为</span>
				<span lang="EN-US">name value pair</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">被放在括号内，同时用逗号格开，如果</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中没有任何变量或者所有变量都有默认值，则可以省去赋值部分（连同括号），如果</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有一个名字为</span>
				<span lang="EN-US">value</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的变量，同时没有其他的变量或者其他的变量都有默认值，则可以只提供值而省略</span>
				<span lang="EN-US">element name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和等号。</span>
		</p>
		<h3 style="MARGIN: 13pt 0cm">
				<font size="3">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">读出</span>
						<span lang="EN-US">annotation</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的包含的信息</span>
				</font>
		</h3>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过</span>
				<span lang="EN-US">reflection</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以读出</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所包含的信息，有一部分</span>
				<span lang="EN-US">annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过使用</span>
				<span lang="EN-US">meta-annotation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">被声明为</span>
				<span lang="EN-US">runtime</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不可知，这时通过分析</span>
				<span lang="EN-US">byte code</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">才能得到其信息。</span>
		</p>
<img src ="http://www.blogjava.net/semi-sleep/aggbug/87678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/semi-sleep/" target="_blank">semi-sleep</a> 2006-12-14 12:19 <a href="http://www.blogjava.net/semi-sleep/archive/2006/12/14/87678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对Java Generic相关知识的总结</title><link>http://www.blogjava.net/semi-sleep/archive/2006/12/13/87557.html</link><dc:creator>semi-sleep</dc:creator><author>semi-sleep</author><pubDate>Wed, 13 Dec 2006 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/semi-sleep/archive/2006/12/13/87557.html</guid><wfw:comment>http://www.blogjava.net/semi-sleep/comments/87557.html</wfw:comment><comments>http://www.blogjava.net/semi-sleep/archive/2006/12/13/87557.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/semi-sleep/comments/commentRss/87557.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/semi-sleep/services/trackbacks/87557.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对于如				List&lt;E&gt;				、				List&lt; String &gt;				、				List				，其中				List&lt;E&gt;				称为				parameterized type				，				E				称为				(formal) type parameter				，				Stri...&nbsp;&nbsp;<a href='http://www.blogjava.net/semi-sleep/archive/2006/12/13/87557.html'>阅读全文</a><img src ="http://www.blogjava.net/semi-sleep/aggbug/87557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/semi-sleep/" target="_blank">semi-sleep</a> 2006-12-13 19:06 <a href="http://www.blogjava.net/semi-sleep/archive/2006/12/13/87557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>