Sae*_*eed 1 java generics hashtable
我需要创建一个自定义Hashtable扩展java.lang.Hashtable,我需要重写get方法来实现以下行为:
谁能帮我.我试着这样做,但我知道这是错的.
import java.util.Hashtable;
public class CustomHashtable<K, V> extends Hashtable {
@Override
public synchronized V get(Object key) {
if(key == null) return new Object();
Object v = super.get(key);
if(v == null){
return new Object();
}
}
}
Run Code Online (Sandbox Code Playgroud)
请看行:
if(key == null) return new Object();
Run Code Online (Sandbox Code Playgroud)
和行:
if(v == null){
return new Object();
}
Run Code Online (Sandbox Code Playgroud)
知道错误发生的位置..
Jon*_*eet 10
您必须存储与V相关的类并创建新实例.例如:
public class CustomHashtable<K, V> extends Hashtable {
Class<V> clazz;
public CustomHashtable(Class<V> clazz) {
this.clazz = clazz;
}
@Override
public synchronized V get(Object key) {
if(key == null) return newValue();
Object v = super.get(key);
if(v == null){
return newValue();
}
}
private V newValue() {
try {
return clazz.newInstance();
} catch (InstantiationException e) {
throw new RuntimeException (e);
} catch (IllegalAccessException e) {
throw new RuntimeException (e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
(当然,您可能希望更改异常处理.)
另一种方法是让调用者有效地提供工厂来创建新的实例V.您可以使用以下界面执行此操作:
public interface Factory<T> {
T create();
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将工厂存储在自定义哈希表中,并create在需要时随时调用.
| 归档时间: |
|
| 查看次数: |
5804 次 |
| 最近记录: |