2010-08-24 12 views
0

我有以下界面;如何在界面中找到靜態字符串

​​

我需要檢查給定的字符串是屬性接口的一部分。

我該如何檢查?

問候, BAS亨德里克斯

+0

你是什麼意思「字符串是屬性接口的一部分」? – 2010-08-24 16:54:12

回答

0

你的問題沒有說清楚你是否」重新嘗試查明查詢字符串是屬性名稱還是值。如果你想找出它是否是一個值,下面的工作:

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; 
} 

不過,我會建議以下使用EnumColin's suggestion,它會更容易讓你在今後的工作中。

+0

我同意科林。他的建議是更好的,但我只限於Java 1.4(並且不能改變界面) – 2010-08-25 08:21:27

5

如果您確實想要這樣做,那麼您應該使用反射並遍歷屬性中的所有值。

一個更好的辦法來做到這一點可能是使用枚舉:

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

Attributes.valueOf(yourVariable);將檢查這個給你。

如果yourVariable不在Attributes中,請注意enum,valueOf()方法將拋出IllegalArgumentException。另外,您yourVariable不是null或者你將不得不處理NullPointerException

+0

@BasHendriks:另外,如果你想堅持使用字符串(和反射),最好把它們放在最後一個類中而不是一個接口中。接口不是爲了這個目的。 – 2010-08-24 19:05:00

+0

我同意枚舉應該是這樣做的正確方法,但我有兩個限制:我無法更改界面。我必須使用這個。而我僅限於java 1.4 ....... – 2010-08-25 07:00:27

+0

然後看看其他解決方案。但是當你問一個問題時,你應該指定你的限制。 – 2010-08-25 07:52:02

0

可以使用反射和測試針對的是一套建立一套:

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

這將搜索目標字符串的字段名稱。我認爲他想要的是實地價值,而不是名稱。 – 2010-08-24 16:59:43

+0

他們在這個例子中是一樣的,但是,是的,你可能是對的。 – zevra0 2010-08-24 17:01:54

0
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; 
} 
相關問題