讀 4 Techniques for Writing Better Java

4 Techniques for Writing Better Java一文中,作者提到了 4個小技巧。

1.協變返回類型,說了就是可以返回子類。java4( java 編程思想第四版) 中已經介紹過了,這裏就不再細究。直接上例子:

public interface CustomCloneable {
	public Object customClone();
}

public class Vehicle implements CustomCloneable {
	private final String model;
	
	public Vehicle(String model) {
		this.model = model;
	}
	
	@Override
	//返回子類,避免了強制轉換
	public Vehicle customClone() {
		return new Vehicle(this.model);
	}
	
	public String getModel() {
		return this.model;
	}
	
	
	public static void main(String[] args) {
		Vehicle originalVehicle = new Vehicle("Corvette");
		Vehicle clonedVehicle = originalVehicle.customClone();
		System.out.println(clonedVehicle.getModel());
	}
}

對於返回子類型或者叫做協變返回類型來說,遵循着下面一下小規則:

1. 父類是 void 的話,子類也是void
2. 父類爲基本類型,子類也必須爲相同的基本類型
3. 對於泛型來說,不能返回 泛型參數的子類,但可以返回泛型類的子類

對於第3點來說是什麼意思呢?
正確範例:

public interface Animal {
	public List<Animal> getAnimals();
}

class Dog implements Animal {
	@Override
	//對於泛型來說,不能返回 泛型參數的子類,但可以返回泛型類的子類
	public ArrayList<Animal> getAnimals() {
		return null;
	}
}

錯誤範例

public interface Animal {
	public List<Animal> getAnimals();
}

class Dog implements Animal {
	@Override
	//對於泛型來說,不能返回 泛型參數的子類,但可以返回泛型類的子類
	public ArrayList<Dog> getAnimals() {
		return null;
	}
}

2.相交泛型,特別精彩,對於面向對象設計模式等很好的利用了起來,需要在慢慢提會一下

3.如何通過 try-resource 自動關閉連接?
通過實現 AutoCloseable 接口

4.final 類以及final 方法就不再論述,Java編程思想已經說得很透徹了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章