考虑到我有Algorithm枚举
public enum Algorithm {
SHA1("sha1"),
HMAC("hmac"),;
Algorithm(final String algorithm) {
this.algorithm = algorithm;
}
private final String algorithm;
public String getAlgorithm() {
return algorithm;
}
}
Run Code Online (Sandbox Code Playgroud)
我有不同的算法
public class Sha1 {
public static String hash(final String text, final byte[] sb) {...}
}
Run Code Online (Sandbox Code Playgroud)
和
public class Hmac {
public static String hash(final String text, final byte[] sb) {...}
}
Run Code Online (Sandbox Code Playgroud)
当有人打电话时,我想返回他们的实例
Algorithm.SHA1.getInstance()
Run Code Online (Sandbox Code Playgroud)
题
当方法是静态的时,您不能返回实例,但是可以使enum实现成为接口,并使调用静态方法的实例方法为您执行虚拟调度:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以拨打hash上SHA1或HMAC实例,就像这样:
Algorithm.HMAC.hash(someText, sb);
Run Code Online (Sandbox Code Playgroud)
或传递EncryptionAlgo实例,如下所示:
EncryptionAlgo algo = Algorithm.SHA1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |