Как найти статическую строку в интерфейсе - PullRequest
0 голосов
/ 24 августа 2010

У меня есть следующий интерфейс;

public static interface Attributes
{
        public final static String InterestDeterminationDate = "InterestDeterminationDate";
        public final static String CreditType = "CreditType";
        public final static String NumberInternal = "NumberInternal";
        public final static String InterestRate = "InterestRate";
        public final static String RemainingDebtAmount = "RemainingDebtAmount";
        public final static String ConsumerPart = "ConsumerPart";
        public final static String TechnicalProductName = "TechnicalProductName";
        public final static String TermOfDuration = "TermOfDuration";
        public final static String PeriodInterestTaxReduction = "PeriodInterestTaxReduction";
        public final static String OriginMark = "OriginMark";
        public final static String Currency = "Currency";
        public final static String PenaltyRuleId = "PenaltyRuleId";
        public final static String InstallmentCalculationMethod = "InstallmentCalculationMethod";
        public final static String InterestRenewalDate = "InterestRenewalDate";
        public final static String TechnicalProductDescription = "TechnicalProductDescription";
        public final static String TechnicalProductDate = "TechnicalProductDate";
        public final static String CollectionIntervalPeriod = "CollectionIntervalPeriod";
        public final static String Enddate = "Enddate";
}

Мне нужно проверить, является ли данная строка частью этого интерфейса атрибутов.

Как я могу это проверить?

С уважением, Бас Хендрикс

Ответы [ 5 ]

5 голосов
/ 24 августа 2010

Если вы действительно хотите это сделать, то вам следует использовать отражение и просмотреть все значения в атрибутах.

Лучшим способом сделать это было бы использование перечислений:

public enum Attributes{
    InterestDeterminationDate,
    CreditType,
    NumberInternal,
    InterestRate,
    RemainingDebtAmount,
    ConsumerPart,
    TechnicalProductName,
    TermOfDuration,
    PeriodInterestTaxReduction,
    OriginMark,
    Currency,
    PenaltyRuleId,
    InstallmentCalculationMethod,
    InterestRenewalDate,
    TechnicalProductDescription,
    TechnicalProductDate,
    CollectionIntervalPeriod,
    Enddate;
}

и Attributes.valueOf(yourVariable); проверит это для вас.

Осторожно с enum, метод valueOf() выдает IllegalArgumentException, если yourVariable не в Attributes. Плюс вы yourVariable не null или вам придется справиться с NullPointerException

0 голосов
/ 24 августа 2010
public static String getFieldName(String fieldValue) throws Exception {
  for (Field field : Attributes.class.getFields()) 
    if (fieldValue.equals(field.get(null)))
      return field.getName();
  return null;
}
0 голосов
/ 24 августа 2010

Ваш вопрос не дает понять, пытаетесь ли вы выяснить, является ли строка запроса именем свойства или значением.Если вы пытаетесь выяснить, является ли это значением, сработает следующее:

public static boolean hasValue(String value) throws IllegalAccessException {
    for(Field field : Attributes.class.getDeclaredFields()) {
        if(((String)field.get(Attributes.class)).equals(value)) {
            return true;
        }
    }
    return false;
}

Однако я бы посоветовал после предложения Колина об использовании Enum, он будетвам будет легче работать в будущем.

0 голосов
/ 24 августа 2010

Вы можете построить набор с помощью отражения и проверить его:

Class<Attributes> attr = Attributes.class;
Field[] fields = attr.getDeclaredFields();
final Set<String> fieldsInAttributes = new HashSet<String>();
for (Field field : fields) {
    fieldsInAttributes.add(field.getName());
}

System.out.println(fieldsInAttributes.contains("PenaltyRuleId"));
0 голосов
/ 24 августа 2010

Вы можете использовать API отражения и метод getFields () класса Class .

Затем вы проверяете имя поля с помощью метода getName () класса Field .

Вот официальное руководство по Oracle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...