Изменить класс Java - PullRequest
       4

Изменить класс Java

0 голосов
/ 02 марта 2011

Я обнаружил потенциально более быструю реализацию класса BigInteger. Любой может сказать мне, как я могу изменить оригинальный класс BigInteger, найденный в java.math, с этим, пожалуйста. Заранее спасибо.

Собственно, это не моя реализация, она представлена ​​в http://www.mail-archive.com/core-libs-dev@openjdk.java.net/msg01746.html ,. Каждое улучшение - это не моя работа, я просто пытаюсь ее использовать.

Ответы [ 5 ]

3 голосов
/ 02 марта 2011

Не. Просто включите файл jar (или файл класса, или исходный код) потенциально более быстрой реализации, и вместо этого создайте его экземпляр.

1 голос
/ 02 марта 2011

Почти нет причин, по которым вы захотите обменять BigInteger на Java с вашими, если только вы не уверены, что он не только быстрее во ВСЕХ соответствующих случаях, но и безопасен для всех программ, которые зависели бы оторигинальный BigInteger, и не конфликтует с Java внутренне (на уровне, который даже разработчики могут не заметить).

Если все вышеперечисленное верно, то вы действительно отправляете свой класс в Oracle, потому что я уверенони постоянно ищут более эффективные реализации, и вы могли бы действительно помочь нам всем, выпустив свой более быстрый класс BigInteger в Java 7 или 8, возможно.

Но поскольку вы говорите, что только «потенциально» нашлиболее быстрая реализация, то, что вы действительно хотите, это подкласс:

public class FastBigInteger extends java.math.BigInteger
{

и переопределите все методы, которые, по вашему мнению, могут быть ускорены

    public BigInteger divide(BigInteger val)
    {
        //your faster implementation goes here
    }
}

, а затем вы можете начать тестирование этого класса на Javaкласс, хронометраж времени выполнения каждого для многих тестовых случаев и представление результатов в Oracle.

1 голос
/ 02 марта 2011

Я думаю, что вы спрашиваете, как использовать ваш "java.math.BigInteger" вместо версии JVM.

Я не думаю, что вы хотите сделать это, потому что для этого потребуется обновить всеJDK / JRE, которые используют ваше приложение.Лучшее решение - использовать ваш «YourBigInteger» вместо BigInteger в вашем приложении.

Вы также можете спросить, как масс-массами его следует включить в JDK / JRE.В этом случае я бы сказал, начать с OpenJDK.

0 голосов
/ 02 марта 2011

Вы должны иметь возможность переопределять классы, поставляемые в JRE, через механизм «одобренного» Java:

http://download.oracle.com/javase/6/docs/technotes/guides/standards/

Однако я полностью согласен с вышесказанным - если возможно, вам следует просто использовать свой класс вместо замены BigInteger: этот метод не требует изменения JRE, и нет риска сломать какой-либо другой пакет, который зависит от BigInteger.

Однако, если у вас есть сторонний пакет, использующий BigInteger, и вы по какой-то причине хотите переключить реализацию под него (подумайте долго), вам может понадобиться одобренный механизм.

0 голосов
/ 02 марта 2011

Java получает все свои встроенные классы из rt.jar.Вы можете заменить класс BigInteger другой реализацией в этом JAR.

Конечно, я бы не рекомендовал это.Расширение BigInteger было бы почти во всех ситуациях гораздо лучшей идеей.Но это можно сделать.

...