Вот класс, который представляет собой Ша-1 га sh. Он имеет константу длины, чтобы он мог выполнять проверку шестнадцатеричных строк в своем методе stati c factory.
class Sha1Hash {
private static final hexStringLength = 40;
Pattern hexStringPattern = Pattern.compile("^[0-9a-f]{" + hexStringLength + "}$");
// constructor
static Sha1Hash fromHexString(String hexString) throws Exception {
if(!hexStringPattern.matches(hexString)) {
// throw an error
}
// otherwise, return a Sha1Hash object
}
// various other static factory methods and instance methods
}
Я хочу создать объект md5 ha sh, который будет иметь шестнадцатеричные строки длины 32. Он будет использовать все те же методы, что и Sha1Ha sh, включая фабричные методы. Моя первоначальная идея заключалась в том, чтобы сделать что-то вроде этого:
abstract class Hash<N extends Size> {
private final hexStringLength = N.getValue();
Pattern hexStringPattern = Pattern.compile("^[0-9a-f]{" + hexStringLength + "}$");
// implement methods, not sure how to implement static factory methods
}
class Sha1Hash extends Hash<SizeForty> {}
class Md5Hash extends Hash<SizeThirtyTwo> {}
Здесь Size
имеет stati c метод getValue
, который должен просто возвращать целое число. Однако, похоже, это невозможно. Есть ли альтернатива? Я также не знаю, есть ли способ избежать дедупликации фабричных методов stati c для каждого класса.