У нас есть набор мест в нашем продукте, где требуется BigInteger, так как числа могут быть довольно длинными. Тем не менее, в более чем 90% случаев они на самом деле не такие длинные и их легко можно удерживать в течение длительного времени.
Глядя на реализацию BigInteger, было бы довольно бесполезно использовать BigInteger там, где достаточно Long.
Имеет ли смысл создавать интерфейс, который имеет такие функции, как BigInteger (деление, умножение и т. Д.), И который будет реализован дочерним классом BigInteger и классом, обертывающим Long? Что-то вроде:
Interface: EfficientBigInteger
Class 1: MyBigInteger extends BigInteger imlpements EfficientBigInteger
Class 2: MyLong implements EfficientBigInteger (this will contain a Long, as we cannot extend the Long class)
Может быть, мы здесь не в том направлении?
Спасибо,
Йон
ОБНОВЛЕНИЕ: Эти объекты (Long или BigInteger) хранятся в памяти довольно долгое время, поскольку они помогают нам идентифицировать проблемное поведение систем, с которыми мы взаимодействуем. Таким образом, объем памяти может быть проблемой. Это проблема, которую мы пытаемся избежать. Класс BigInteger имеет несколько полей (signum, mag array, bitcount и т. Д. И т. Д.), Которые вместе примерно вдвое больше, чем у класса, который инкапсулирует Long (принимая во внимание затраты памяти на наличие объекта в первую очередь). Это означает удвоение площади для того, что мы часто используем.