Взгляните сюда http://forums.asp.net/t/1410702.aspx/1
Используйте следующие данные регулярного выражения, это будет поддерживать прыжок год.
var reg = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g;
Создание конструктора копирования:
class DummyBean {
private String dummy;
public DummyBean(DummyBean another) {
this.dummy = another.dummy; // you can access
}
}
Каждый объект также имеет метод клонирования, который можно использовать для копирования объекта, но не использовать его. Слишком просто создать класс и использовать неправильный метод клонирования. Если вы собираетесь это сделать, прочтите хотя бы то, что Джошуа Блох говорит об этом в Эффективная Java .
Альтернатива egaga's метод конструктора копии. Вы, вероятно, уже имеете POJO, поэтому просто добавляете другой метод copy()
, который возвращает копию инициализированного объекта.
class DummyBean {
private String dummyStr;
private int dummyInt;
public DummyBean(String dummyStr, int dummyInt) {
this.dummyStr = dummyStr;
this.dummyInt = dummyInt;
}
public DummyBean copy() {
return new DummyBean(dummyStr, dummyInt);
}
//... Getters & Setters
}
, Если Вы уже имеете DummyBean
и хотите копию:
DummyBean bean1 = new DummyBean("peet", 2);
DummyBean bean2 = bean1.copy(); // <-- Create copy of bean1
System.out.println("bean1: " + bean1.getDummyStr() + " " + bean1.getDummyInt());
System.out.println("bean2: " + bean2.getDummyStr() + " " + bean2.getDummyInt());
//Change bean1
bean1.setDummyStr("koos");
bean1.setDummyInt(88);
System.out.println("bean1: " + bean1.getDummyStr() + " " + bean1.getDummyInt());
System.out.println("bean2: " + bean2.getDummyStr() + " " + bean2.getDummyInt());
Вывод:
bean1: peet 2 bean2: peet 2 bean1: koos 88 bean2: peet 2
, Но обе работы хорошо, это в конечном счете ваше дело...
Другой подход, помимо явного копирования, состоит в том, чтобы сделать объект неизменяемым (без set
или других методов мутатора). Таким образом, никогда не возникает вопроса. Неизменяемость становится более сложной с более крупными объектами, но другая сторона этого состоит в том, что она подталкивает вас к разделению на когерентные маленькие объекты и составные части.
Для этого вам нужно каким-то образом клонировать объект. Хотя в Java есть механизм клонирования, не используйте его, если в этом нет необходимости. Создайте метод копирования, который выполняет копирование за вас, а затем выполните:
dumtwo = dum.copy();
Здесь есть еще несколько советов по различным методам выполнения копирования.
Да, вы просто делаете ссылку на объект. Вы можете клонировать объект, если он реализует Cloneable
.
Прочтите эту вики-статью о копировании объектов.
Вот достойное объяснение clone ()
, если вам в конечном итоге понадобится это ...
Вы можете попробовать реализовать Cloneable
и использовать метод clone ()
; однако, если вы используете метод клонирования, вы должны - по стандарту - ВСЕГДА переопределять Object
метод public Object clone ()
.
Просто выполните следующие действия:
public class Deletable implements Cloneable{
private String str;
public Deletable(){
}
public void setStr(String str){
this.str = str;
}
public void display(){
System.out.println("The String is "+str);
}
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
и где бы вы ни захотели получить другой объект, просто выполните клонирование. например:
Deletable del = new Deletable();
Deletable delTemp = (Deletable ) del.clone(); // this line will return you an independent
// object, the changes made to this object will
// not be reflected to other object