在準備面試時,有人提到知道如何用java編寫一個類/方法read-only。我一直在做一些搜索,但還沒有找到真正具體的東西。只讀類/方法
也許這個問題比我更容易回答,但是什麼樣的方法可以使類或方法在java中只讀?
在準備面試時,有人提到知道如何用java編寫一個類/方法read-only。我一直在做一些搜索,但還沒有找到真正具體的東西。只讀類/方法
也許這個問題比我更容易回答,但是什麼樣的方法可以使類或方法在java中只讀?
一種解決方案是創建屬於只讀類immutable
對象。您可以定義一個類,使得該類中的任何方法都不會更改對象的內部狀態。在這樣的類中,由於只能讀取內部狀態,因此別名不會產生影響,因此如果許多代碼段正在讀取相同的對象,則沒有任何問題。
要創建不可變對象採取以下鏈接看看:
下面的代碼將確保您的類始終是隻讀的,但如果你發現任何循環孔,請張貼在這裏。
import java.io.Serializable;
final public class ImmutableClass implements Cloneable,Serializable {
private static final long serialVersionUID = 6488148163144293060L;
private static volatile ImmutableClass instance;
private ImmutableClass() {
// no-op
System.out.println("instance created : " + this.hashCode());
}
/**
* Lazy Instantiation
*
* @return
*/
public static ImmutableClass getInstance() {
if (instance == null) {
synchronized (ImmutableClass.class) {
System.out.println("aquired lock");
if (instance == null) {
instance = new ImmutableClass() {
};
}
System.out.println("released lock");
}
}
return instance;
}
public Object readResolve() {
System.out.println("readResolve()");
return getInstance();
}
@Override
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
}
Read-only
類意味着,我們正在談論「IMMUTABLE」概念。
下面的例子描述了相同的:
public class ImmutableString {
static String upcase(String s) {
return s.toUpperCase(); // here local variable s vanishes
// it return the value to a new String object
}
public static void main(String[] args) {
String s = new String("abc");
System.out.println(s); //abc
String s1 = upcase(s);
System.out.println(s1); //ABC
System.out.println(s); //abc
}
}
,讓我們看看一個只讀版本的對象,
案例1:如果你的類包含了不指向任何其他對象的字段例如:
public class Person{
private String name;
//Getters n Setters
}
在這種情況下
,您可以返回這個類的一個副本,寫一個接受的人,誰想要得到一個Person對象都會有這個副本的任何一個構造函數對象,以便任何二傳手操作不會影響原來的對象(字符串是不可變的)
案例2:如果您的對象包含一個指向另一個對象或列表或地圖
在這種情況下使類實現它有一個接口只有只讀的方法(吸氣劑),並隨時隨地可以返回對象,更改它返回這個接口,所以客戶端將只能訪問只讀方法
如:
class Person implements ReadOnly{
String name;
.. assume pointers also in here
// Getter n Setters
public PersonReadOnly(){
return this;
}
}
interface PersonReadOnly {
public String getName();
}
能將它們說話關於['final'](http://www.javamex .COM/java_equivalents/const_java.shtml)? –
你正在尋找的詞是「不可變的」 –