2014-01-28 4 views
0

В API Java OpenCV FeatureDetector создается с помощью следующего метода фабрики:Оценка строку, соответствующую имени поля класса/экземпляра

public static FeatureDetector create(int detectorType) 

где detectorType соответствует static final int поле того же класса FeatureDetector , например FeatureDetector.ORB.

Я хотел бы указать тип FeatureDetector в аргументе командной строки или в файле конфигурации. Поэтому в основном мне нужно «преобразовать» строку FeatureDetector.ORB в значение поля FeatureDetector.ORB.

До сих пор я был в состоянии сделать это с помощью отражения:

String detectorClassName = "ORB"; // the actual code gets the value from a Properties object 
detectorClass = FeatureDetector.class; 
Field f = detectorClass.getDeclaredField(detectorClassName); 
int d = f.getInt(detectorClass); 
detector = FeatureDetector.create(d); 

, но мне было интересно, если есть более быстрый и легкий способ сделать это.

+0

использование Перечисления и функции, которые они предоставляют? – hoaz

+0

Я бы предпочел не использовать явные числовые константы, которые могут измениться в будущих выпусках. –

ответ

0

Вы можете использовать Java перечислений:

enum FeatureDetectorType { 
    ORB(FeatureDetector.ORB), 
    FOO(FeatureDetector.FOO), 
    BAR(FeatureDetector.BAR); 

    private final int detectorId; 

    FeatureDetectorType(detectorId) { 
     this.detectorId = detectorId; 
    } 

    public int getDetectorId() { 
     return detectorId; 
    } 

} 

и поиска Перечисления по имени, как это:

FeatureDetectorType.valueOf("ORB").getDetectorId() 
+0

Ваше решение элегантно, но для этого требуется написать перечисление для каждого параметра, который вы хотели бы передать как строку. Спасибо. –

Смежные вопросы