看到有關的IntegerKey
特殊功能的評論,似乎順理成章包你在一個新的類要求的功能(MHashMap在下面的例子):
import java.util.HashMap;
class IntegerKey extends Number implements Comparable<IntegerKey> {
private Integer m_key;
public IntegerKey(Integer key) {
m_key = key;
}
public IntegerKey(int key) {
m_key = key;
}
//...Functionality
//...required methods to include to actually test
@Override
public int compareTo (IntegerKey arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public double doubleValue() {
// TODO Auto-generated method stub
return 0;
}
@Override
public float floatValue() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int intValue() {
// TODO Auto-generated method stub
return 0;
}
@Override
public long longValue() {
// TODO Auto-generated method stub
return 0;
}
}
class MyCache {}
class MHashMap extends HashMap<IntegerKey, MyCache> {
public void put (int key, MyCache value) {
super.put(new IntegerKey(key), value);
}
public void put (Integer key, MyCache value) {
super.put(new IntegerKey(key), value);
}
//...Useful to include other wrappings
public MyCache get (int key) {
return super.get(new IntegerKey(key));
}
public MyCache get (Integer key) {
return super.get(new IntegerKey(key));
}
}
public class AutoboxFix {
public static void main (String[] args) {
//needed to explicitly declare map as MHashMap for "override" to work
MHashMap map = new MHashMap();
//compiles
map.put(5, new MyCache());
//... get probably works with your extended functionality
}
}
這應該提供的功能你尋找。 get方法將取決於Comparable
中的方法。可能有更多的方法需要重新實現,從int
或Integer
到IntegerKey
,但您應該能夠正常使用其餘的HashMap功能。有必要將map聲明爲MHashMap
類型,因爲使用Map
將不會編譯。將課程分成自己的文件並公開它們是明智的。
如果絕對需要將地圖聲明爲Map<IntegerKey, MyCache>
,則此方法無效。你可以做一個靜態方法在以往任何時候你使用地圖,這樣做鑄件爲您提供:
public class AClass {
public static void myPutMethod (Map<Integer, MyCache> map, int key,
MyCache value) {
map.put(new IntegerKey(key), value);
}
}
用途:
myPutMethod(map, 5, new MyCache());
然後你就可以定義Integer
和Map.get
更多的方法。
5是一個int,而不是IntegerKey。你不能使用int/Integer而不是IntegerKey? – Seitaridis