Проблема:
Я хочу расширить Java java .util. BitSet , используя мой собственный MyBitSet, просто чтобы добавить некоторые функциональные возможности / методы преобразования, которые я часто использую.
Метод BitSet, который я действительно считаю полезным в своем коде, это "фабричный" publi c stati c метод BitSet .valueOf (long []) , поэтому я хочу, чтобы мой класс MyBitSet предлагал ту же утилиту для создания экземпляра MyBitSet из предоставленного long [].
Проблема в том, что BitSet Java обеспечивает нет конструктора publi c, принимающего аргумент long [], поэтому я не могу просто использовать super ().
И BitSet.valueOf (long []) возвращает новый объект BitSet, поэтому я не могу просто привести его к моему подклассу MyBitSet из-за исключения ClassCastException.
Кроме того, BitSet.valueOf (long []) метод устанавливает некоторые из частных переменных BitSet, к которым у меня нет доступа через мой подкласс MyBitSet, поэтому я не вижу простого способа просто скопировать реализацию суперкласса напрямую - плохое решение, но я просто рассматриваю мои варианты здесь.
Вопрос:
Могу ли я как-то обеспечить такую функциональность в моем подклассе MyBitSet?
В общем, возможно ли это использовать "фабричные" методы stati c, такие как valueOf (long []), для создания экземпляра моего собственного подкласса?
Есть что-то, что я мог упустить из виду?
Решение Я бы предпочел избежать:
Альтернативным решением будет использование класса-оболочки BitSet вместо его расширения.
А именно, класс, содержащий экземпляр BitSet как переменная и применение т В этой переменной BitSet мне требуются дополнительные функции. Однако этот подход сейчас выглядит немного странно, и я бы предпочел просто расширить BitSet, если это возможно.
Вопрос типа «для размышлений»:
BitSet.valueOf ( long []) - это метод, который создает новый экземпляр BitSet в инициализированном состоянии , специфицирующем c, вместо состояния по умолчанию .
Может ли это быть, не предлагая такую публикацию * Конструктор 1058 *, но только "фабричный" метод stati c, на самом деле является заданным шаблоном, чтобы разработчики не могли использовать его для инициализации своего собственного экземпляра подкласса в состоянии, отличном от значения по умолчанию?
Если так, то почему? В чем проблема в таком случае?