網頁

2014年1月3日 星期五

Effective Java實作類別

定義好了Interface之後,現在我們開始來實作類別:Role,建立一個class,implements Role,將3個屬性及clone()實作出來,單純的getter與setter,可以利用IDE工具,自動產生代碼。



此處要注意的是clone(),它是shallow clone,由於目前3個屬性,分別是基本型別與字串,所以只要調用super.clone()就行了,Effective Java建議實作Serializable,所以會有個serialVersionUID須住意,這是為了將來序列化所作的1個版本約定,可以自行指定一個長整數,或是利用IDE工具自動產生數字。




實作類別時除了實作getter與setter 外,並依照Effective Java建議覆寫clone(),若無implements Cloneable 會拋出CloneNotSupportedException。當捕捉到exception後,可以再往外丟出AssertionError,表示無法複製。


package org.openyu.java.role.vo.impl;

import org.openyu.java.role.vo.Role;

/**
 * The Class RoleImpl.
 */
public class RoleImpl implements Role {

 /** The Constant serialVersionUID. */
 private static final long serialVersionUID = 4239702119231824382L;

 /** The id. */
 private long id;

 /** The name. */
 private String name;

 /** The strength. */
 private int strength;

 /**
  * Instantiates a new role impl.
  */
 public RoleImpl() {

 }

 /*
  * (non-Javadoc)
  *
  * @see org.openyu.java.role.vo.Role#getId()
  */
 public long getId() {
  return id;
 }

 /*
  * (non-Javadoc)
  *
  * @see org.openyu.java.role.vo.Role#setId(long)
  */
 public void setId(long id) {
  this.id = id;
 }

 /*
  * (non-Javadoc)
  *
  * @see org.openyu.java.role.vo.Role#getName()
  */
 public String getName() {
  return name;
 }

 /*
  * (non-Javadoc)
  *
  * @see org.openyu.java.role.vo.Role#setName(java.lang.String)
  */
 public void setName(String name) {
  this.name = name;
 }

 /*
  * (non-Javadoc)
  *
  * @see org.openyu.java.role.vo.Role#getStrength()
  */
 public int getStrength() {
  return strength;
 }

 /*
  * (non-Javadoc)
  *
  * @see org.openyu.java.role.vo.Role#setStrength(int)
  */
 public void setStrength(int strength) {
  this.strength = strength;
 }

 /*
  * (non-Javadoc)
  *
  * @see java.lang.Object#clone()
  */
 public Object clone() {
  RoleImpl result = null;
  try {
   result = (RoleImpl) super.clone();
  } catch (CloneNotSupportedException ex) {
   throw new AssertionError();
  }
  return result;
 }
}






Mix所用的目錄結構,可能會與一般專案略有不同,如果你已有習慣的用法,那不需特別再改變,Mix習慣上會把Interface與實作類別的目錄分開,是因為定義與實作可能不會是同1個人,為方便分工開發而設計,Effective Java並沒有特別指名用哪種目錄結構,所以依照現有的方式即可。







  1. 實作getter與setter 。
  2. Effective Java Item 11:審慎覆寫clone()。
  3. Effective Java Item 74:實作Serializable。
  4. serialVersionUID給值。



沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...