Chr*_*ris 5 java generics enums
我正在尝试编写一个接受任何枚举的泛型函数,并将值放入地图中以便在下拉列表中使用.
这是我到目前为止,(对于一个特定的枚举),我的函数enumToMap可以重写一般接受任何枚举类型?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
private enum testenum{
RED,BLUE,GREEN
}
private static Map enumToMap(testenum e){
HashMap result = new HashMap();
List<testenum> orderReceiptKeys = Arrays.asList(e.values());
List<String> orderReceiptValues = unCapsCase(orderReceiptKeys);
for(int i=0;i<orderReceiptKeys.size();i++){
result.put(orderReceiptKeys.get(i), orderReceiptValues.get(i));
}
return result;
}
/**
* Converts a string in the form of 'TEST_CASE' to 'Test case'
* @param s
* @return
*/
private static String unCapsCase(String s){
StringBuilder builder = new StringBuilder();
boolean first=true;
for(char c:s.toCharArray()){
if(!first)
c=Character.toLowerCase(c);
if(c=='_')
c=' ';
builder.append(c);
first=false;
}
return builder.toString();
}
/**
* Converts a list of strings in the form of 'TEST_CASE' to 'Test case'
* @param l
* @return
*/
private static List<String> unCapsCase(List l){
List<String> list = new ArrayList();
for(Object o:l){
list.add(unCapsCase(o.toString()));
}
return list;
}
public static void main(String[] args) throws Exception {
try{
testenum e=testenum.BLUE;
Map map = enumToMap(e);
for(Object k:map.keySet()){
System.out.println(k.toString()+"=>"+map.get(k));
}
}catch(Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何建议.
Col*_*inD 12
将enumToMap
方法的签名更改为以下内容:
private static <E extends Enum<E>> Map<E, String> enumToMap(Class<E> enumType)
Run Code Online (Sandbox Code Playgroud)
然后你打电话给e.values()
使用enumType.getEnumConstants()
.
在main方法中,您可以调用此方法,如:
Map<testenum, String> map = enumToMap(testenum.class);
Run Code Online (Sandbox Code Playgroud)
正如海员提到的那样,你也应该EnumMap
用作Map
实施而不是HashMap
.
不要将HashMap与枚举一起使用,这就是EnumMap的设计目的.
如Sun Java Tutorial中Collection Trail的Map部分所示:
EnumMap
,内部实现为数组,是一个Map
与枚举键一起使用的高性能实现.该实现将Map
接口的丰富性和安全性与接近阵列的速度相结合.如果要将枚举映射到值,则应始终EnumMap
优先使用数组.
归档时间: |
|
查看次数: |
5945 次 |
最近记录: |