假设我有 Algorithm
枚举
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()
问题
- 既然我的方法是静态的,我该如何返回实例? (它是静态的,因此多个线程不能互相玩弄数据)
最佳答案
当你的方法是静态的时候你不能返回一个实例,但是you can make your enum
implement an interface ,并让调用静态方法的实例方法为您执行虚拟分派(dispatch):
public interface EncryptionAlgo {
String hash(final String text, final byte[] sb);
}
public enum Algorithm implements EncryptionAlgo {
SHA1("sha1") {
public String hash(final String text, final byte[] sb) {
return Sha1.hash(text, sb);
}
},
HMAC("hmac") {
public String hash(final String text, final byte[] sb) {
return Hmac.hash(text, sb);
}
};
Algorithm(final String algorithm) {
this.algorithm = algorithm;
}
private final String algorithm;
public String getAlgorithm() {
return algorithm;
}
}
现在您可以在 SHA1
或 HMAC
实例上调用 hash
,如下所示:
Algorithm.HMAC.hash(someText, sb);
或者传递 EncryptionAlgo
实例,像这样:
EncryptionAlgo algo = Algorithm.SHA1;
关于java - 如何从 Enum 返回一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30339122/