【发布时间】:2014-08-15 13:13:22
【问题描述】:
我有以下 DataSet 类,我们可以在其中保存任何类型的对象。主要是将对象从服务器传输到客户端。 contents 变量可以保存任何可序列化的对象。它可以是自定义编写的类对象或 java 类,如 Integer、String 等。
我正在尝试将其转换为泛型。我们应该如何同时将其转换为泛型,我想确保我不必更改所有包含对象类的代码,因为我们甚至在内容。
我已经简化了这个类,只显示一些相关的字段和方法。
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.Vector;
public class DataSet implements Serializable, PropertyChangeListener{
Hashtable contents = new Hashtable();
@Override
public void propertyChange(PropertyChangeEvent arg0) {
// TODO Auto-generated method stub
}
public void addObject(Object obj){
Vector vector = (Vector)contents.get(obj.getClass());
if (vector == null){
vector = new Vector();
vector.add(obj);
contents.put(obj.getClass(), vector);
}
}
public Vector getObjects(Class objType){
if (contents.contains(objType)){
return (Vector)contents.get(objType);
}
else{
return new Vector();
}
}
}
感谢您的及时回复。但是,在查看了以下三个答案之后,我觉得我没有正确传达问题。
为了实现我想要的方式,如果我调用 dataset.getObjects(E 类型),我应该得到一个 E 类型的向量。我不应该投射到(矢量)中。因为我希望内容包含键值对的Class<E> 和Vector<E>。如果我们能做到,那我只能说这是safe。
DataSet ds = new DataSet();
Vector<String> strings = ds.getObjects(String.class);
Vector<Integer> integer = ds.getObjects(Integer.class);
Vector<Employee> employees = ds.getObjects(Employee.class);
【问题讨论】: