java中类的通用getter方法

时间:2015-02-23 12:18:04

标签: java enums

嘿我已经将类道具定义为

`

class prop{
   String name;
   String address;
   String city;
   public void String getValue(String str){
       String res=null;
       if(str.equals("name"))
         res="john";
       if(str.equals("city"))
          res="london";
       return res;
}`

我已经定义了这样的getter类,是否可以用其他方式定义一般的getter方法。

有人告诉我使用enum课程,但我不明白enum在这里会有用。

函数中的

参数getValue(String str)是一个String,因为它被其他类调用。

3 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:

class Prop{
   public enum Properties {
       Name,
       Address,
       City
   }

   Map<Properties, String> propertyMap;

   public Prop() {
       this.propertyMap = new HashMap<Properties, String>();
   }


   public void String setValue(Properties prop, String value){
      this.propertyMap.put(prop, value);
   }

   public void String getValue(Properties prop){          
           return this.propertyMap(prop);
   }
}

增加价值:

Prop prop = new Prop();
...
prop.setValue(prop.Properties.Name, "Bob");
...
String name = prop.getValue(prop.Properties.Name); //Should be Bob, assuming it did not change.

编辑: 根据您的查询,您可以这样做:

class Prop{
   Map<String, String> propertyMap;

   public Prop() {
       this.propertyMap = new HashMap<String, String>();
   }


   public void String setValue(String prop, String value){
      this.propertyMap.put(prop, value);
   }

   public void String getValue(String prop){
      return this.propertyMap(prop);      
   }
}

使用这种方法的问题是,无论是谁调用你的代码都必须猜测或者在某种程度上具有某种先验知识来调用你的代码。通过枚举,您可以预先提供地图所具有的属性。

答案 1 :(得分:0)

class prop {
    public enum Field {
        NAME, ADDRESS, CITY
    }

    private String name;
    private String address;
    private String city;

    public String getValue(Field field) {
       switch(field) {
           case NAME : return name;
           case ADDRESS : return address;
           case CITY : return city;  
       }

       return null;
    }
}

或其他什么。

一种奇怪的做事方式......

答案 2 :(得分:0)

这确实是偏离主题的,在这种情况下我永远不会使用枚举,但您可以在枚举中存储值:

enum Properties {
  Name("John"),
  Address("221B Baker Street"),
  City("London");

  private String value;

  Properties(String value0){
    value = value0;
  }
}