Как я могу позволить пользователю написать свою собственную реализацию предопределенного метода, как accept () в FilenameFilter - PullRequest
1 голос
/ 01 ноября 2011

FilenameFilter имеет метод accept , который я могу реализовать, чтобы сообщить системе, как я хочу фильтровать файлы. Я хочу реализовать нечто подобное. Вот мой сценарий:

Я пишу универсальный API, который работает поверх iText , который добавляет Штрих-код к документам PDF. У меня есть общий пользовательский штрих-код.

public class MyCustomBarcode{

/**
 * This variable holds the type of barcode
 * com.itextpdf.text.pdf.Barcode
 */
private Barcode barcode;

/**
 * The X position of the barcode. (0, 0) is at the bottom left
 */
private float x;

/**
 * The Y position of the barcode. (0, 0) is at the bottom left
 */
private float y;

/**
 * 
 */
private int rotation;

...
}

Поэтому, когда пользователь использует этот API, ему просто нужно передать List<MyCustomBarcode> методу из моего API, тогда API вставит штрих-код на каждую страницу PDF. Проблема в том, что каждый штрих-код имеет различный код формат. Например, BarcodeInter25 может использовать код, подобный 000001, 000002 ..., где Barcode39 может использовать что-то еще. Поэтому я хочу позволить пользователю написать собственную реализацию того, как генерировать значение штрих-кода. Примерно так

MyCustomBarcode barcode = new MyCustomBarcode(x, y, z){
    public String getSeqNum(int i){
       //The user own implementation of how they want integer i to look like.
       //E.g if i==1, I might return 000001
    }
);

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

1 Ответ

2 голосов
/ 01 ноября 2011

В родительском классе создайте метод abstract, а затем пусть каждый подкласс предоставит свою конкретную реализацию.


Пример

Родительский класс

public abstract class Barcode{
    .
    .
    .
    public abstract String getSeqNum(int i);
}

Подкласс

public final class FooBarcode extends Barcode{
    .
    .
    .
    public final String getSeqNum(int i){
        // provide own implementation
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...