我想编写一个构造函数来设置hashmap中的值。你能告诉我最好的方法是什么吗?
我现在使用switch语句调用基于hashmap键的方法,但我想知道是否有更好的替代方法。
仅供参考,在myitems类中,我实际上有25个变量要设置。
public class MainClass{
BufferedReader br = new BufferedReader(new FileReader(file));
String[] datakey = br.readLine().split(";"); // getting header, 25 of them
HashMap<String,String> bookmap = new HashMap<String,String>();
String[] dataarr = line.split(";"); // getting values, 25 of them
int k = 0;
for(String d : datakey){
bookmap.put(d, dataarr[k++]); // Key-Value Pair
}
myItems item = new myItems(bookmap); // HOW TO WRITE THIS CONSTRUCTOR?
}
public class myItems {
String _id="";
String _name="";
String _genre="";
String _language="";
int _rating=0;
int _price=0;
...........................
...//25 OF THEM...
...........................
public myItems(HashMap<String,String> allrec){
Iterator<Map.Entry<String,String>> it = allrec.entrySet().iterator();
while(it.hasNext()){
Map.Entry pairs = (Map.Entry)it.next();
Switch(pairs.getKey()){
case "id":
setid(pairs.getValue());
break;
case "name":
setname(pairs.getValue());
break;
Deafult:
break;
}
}
}
public int getid(){
return this._id;
}
public String getname(){
return this._name;
}
..............................
..............................
..............................
public void setid(int id){
this._id = id;
}
public void setname(String name){
this._name = name;
}
..............................
..............................
..............................
}
2条答案
按热度按时间jm2pwxwz1#
你为什么不这样写呢:
如果不希望为任何属性分配null值,则应检查Map是否返回null:
你的问题其实还有另一个解决办法。为什么还要费心把这些值存储在属性中呢?你可以把它们储存在Map上。您的构造函数如下所示:
请注意,您应该考虑复制整个Map,而不是像上面那样存储引用。然后编写如下集合方法:
你的get方法是这样的:
nsc4cvqm2#
你可以用反射。想象一下,有些字段有setter(对于数据结构来说是可以的,对于类来说是可疑的——那么可变性和不可变性呢?),而其他字段没有。然后你可以这样做:
有一些异常需要处理,您需要相应地更改源代码。
android reflection上的afair将受到性能惩罚。您可能需要关注该方法的性能。