Я добавлю несколько мыслей к этому:
- Технически нет ничего особенного в классе библиотеки, просто в том, как вы его используете.На мой взгляд, самое главное, что вы серьезно думаете о своем публичном API.Сделайте его достаточно полезным, чтобы быть полезным для ваших потенциальных абонентов, оставьте его достаточно маленьким, чтобы иметь возможность свободно изменять внутреннюю реализацию по своему усмотрению, и убедитесь, что у вас есть хорошее понимание того, что ваша библиотека делает делаети что он не делает.Не пытайся делать все, просто делай одну вещь хорошо.(И API обычно распространяется и на документацию, убедитесь, что вы пишете приличный Javadocs .)
- Начните с любого из них, так как они в порядке.Если вы хорошо спроектируете свой API, вы можете изменить это в любое время и развернуть версию 1.1, которая использует другой алгоритм (или даже использует JNI для вызова нативной библиотеки C), и ваши абоненты могут просто вставить новый JAR и использовать вашкод даже без перекомпиляции.Не забывайте, что преждевременная оптимизация - корень всего зла;не беспокойтесь о том, чтобы сделать вашу первую версию быстрой , но сосредоточьтесь на том, чтобы сделать ее правильной и чистой.
- Я не уверен, почему ваш друг предлагал потоки.Потоки - это способ работы с вводом и выводом необработанных байтов, который полезен при чтении из файлов или сетевых подключений, но, как правило, не является хорошим способом вызова другого метода Java.Ваша библиотека не должна беспокоиться о вводе и выводе, она просто должна предложить несколько методов для численных расчетов.Поэтому вы должны реализовать методы, которые принимают целые числа (или все, что подходит) и возвращают целые числа.
Например, вы можете реализовать:
/**
* Calculates the next prime number after a given point.
*
* Implementation detail: callers may assume that prime numbers are
* calculated deterministically, such that the efficiency of calling
* this method with a large parameter is not dramatically worse than
* calling it with a small parameter.
*
* @param x The lower bound (exclusive) of the prime number to return.
* Must be strictly positive.
* @return Colloquially, the "next" prime number after the given parameter.
* More formally, this number will be prime and there are no prime numbers
* less than this value and greater than <code>x</code> that are also
* prime.
* @throws IllegalArgumentException if <code>x</code> is not strictly
* positive.
*/
public long smallestPrimeGreaterThan(long x);
/**
* Returns all prime numbers within a given range, in order.
*
* @param lowerBound The lower bound (exclusive) of the range.
* @param upperBound The upper bound (exclusive) of the range.
* @return A List of the prime numbers that are strictly between the
* given parameters. This list is in ascending order. The returned
* value is never null; if no prime numbers exist within the given
* range, then an empty list is returned.
*/
public List<Long> primeNumbersBetween(long lowerBound, long upperBound);
Нет потоков в поле зрения!Использование потоков, таких как вывод на консоль, должно обрабатываться приложениями, которые используют вашу библиотеку, а не самой библиотекой.Это то, что я имел в виду в своем первом замечании о том, чтобы понять, что ваша библиотека делает и чего не делает.Вы просто генерируете простые числа;звонящий должен сделать с ними что-нибудь классное.