पर विचार करें कि मैं Algorithm
enum के रूप मेंEnum से एक उदाहरण कैसे वापस करें?
public enum Algorithm {
SHA1("sha1"),
HMAC("hmac"),;
Algorithm(final String algorithm) {
this.algorithm = algorithm;
}
private final String algorithm;
public String getAlgorithm() {
return algorithm;
}
}
है और मैं के रूप में
public class Sha1 {
public static String hash(final String text, final byte[] sb) {...}
}
और
public class Hmac {
public static String hash(final String text, final byte[] sb) {...}
}
मैं जब कोई उदाहरण
के लिए कहता है उनके उदाहरणों लौटना चाहते अलग एल्गोरिदम हैAlgorithm.SHA1.getInstance()
प्रश्न
- मैं कैसे उदाहरण लौट सकते हैं के बाद से मेरी विधि स्थिर है? (यह इतना है कि एक से अधिक थ्रेड एक दूसरे के डेटा के साथ चारों ओर नहीं खेल सकते स्थिर है)
इसे थ्रेड सुरक्षित बनाने के लिए - सिंक्रनाइज़ेशन का उपयोग करने के बारे में क्या? – Razib
वैसे ही आप एक getAlgorithm() विधि जोड़ते हैं, तो आप getInstance() विधि भी जोड़ सकते हैं। आप इसे एनम या विभिन्न सिफर पर लागू कर सकते हैं। 'SHA1 (" sha1 ") {एक्स getInstance() {वापसी नया Sha1(); }, एचएमएसी ("एचएमएसी") {एक्स getInstance() {वापसी नया एचएमएसी(); } '(लेकिन यह आपको एक स्थिर विधि के साथ बहुत मदद नहीं करता है - जो कि किसी भी मामले में एक अच्छा विचार नहीं है)। – eckes