在Java中,可以使用Symbol類作為唯一標識符來表示一些不可變的、唯一的對象。Symbol類是一個內部類,它表示一種不可變的、唯一的字符串值,可以使用該類創建Symbol對象,并將其作為唯一標識符使用。
以下是使用Symbol作為唯一標識符的示例代碼:
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
public class SymbolExample {
private static final Map<Symbol, String> symbolMap = new ConcurrentHashMap<>();
public static void main(String[] args) {
Symbol symbol1 = Symbol.valueOf("symbol1");
Symbol symbol2 = Symbol.valueOf("symbol2");
symbolMap.put(symbol1, "Value for symbol1");
symbolMap.put(symbol2, "Value for symbol2");
System.out.println(symbolMap.get(symbol1));
System.out.println(symbolMap.get(symbol2));
Symbol symbol3 = Symbol.valueOf("symbol1");
System.out.println(symbolMap.get(symbol3)); // Output: Value for symbol1
System.out.println(symbol1 == symbol3); // Output: true
}
}
final class Symbol {
private static final Map<String, Symbol> symbols = new HashMap<>();
private final String value;
private Symbol(String value) {
this.value = value;
}
public static Symbol valueOf(String value) {
return symbols.computeIfAbsent(value, Symbol::new);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Symbol symbol = (Symbol) o;
return Objects.equals(value, symbol.value);
}
@Override
public int hashCode() {
return Objects.hash(value);
}
}
在上面的示例代碼中,我們定義了一個Symbol類,它包含一個私有構造函數和一個靜態工廠方法valueOf()來創建Symbol對象。我們使用一個靜態Map symbols來存儲已經創建的Symbol對象,保證每個Symbol對象是唯一的。在main方法中,我們用Symbol對象作為key來存儲和獲取值,驗證了Symbol對象的唯一性。