Java Классы, параметризованные целыми числами: возможно ли это / как лучше всего это приблизить? - PullRequest
0 голосов
/ 05 августа 2020

Вот класс, который представляет собой Ша-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 для каждого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...