我有这段代码,在这里我使用扩展来保留每个类中所有创建的对象。
public class ObjectPlus implements Serializable{
private static final long serialVersionUID = 1L;
protected static Hashtable<Class<? extends ObjectPlus>, Vector<ObjectPlus>> extensions = new Hashtable<>();
public ObjectPlus()
{
Vector<ObjectPlus> extension= null;
Class<? extends ObjectPlus> clasS = this.getClass();
if(extensions .containsKey(clasS))
{
extension= extensions.get(clasS);
}
else
{
extension = new Vector<ObjectPlus>();
extensions.put(clasS, extension);
}
extension.add(this);
}
我还有另外3个班级:
public abstract class Employee extends ObjectPlus{}
public class Guide extends Employee{}
public class Renovator extends Employee{}
并且我将每个新的Guide()和新的Renovator()添加到此哈希表中。
我在Employee()类中也有一个功能:
public void raise(double raiseAmount){}
我要在其中使用方法
public void setSalary(double newSalary) {
this.salary = newSalary;
}
因此,Guide和Renovator类中的每个对象的工资都设置为新值。
我可以在此哈希表上正确迭代吗?
我正在尝试使用类似这样的东西:
public void raise(double raiseAmount){
Set<Class<? extends ObjectPlus>> setOfClasses = extensions.keySet();
for (Class<? extends ObjectPlus> key : setOfClasses){
extensions.get(key).setSalary(raiseAmount);
}
}
但这不起作用:“无法解析方法'setSalary(double)'
答案 0 :(得分:0)
我想您正在尝试在Employee类的整个范围内调用raise()
。在您提供的最后一个代码片段中,您尝试对ObjectPlus.extensions中保存的所有类的所有对象调用setSalary。
我想您需要的是:
public void raise(double raiseAmount){
List<Employee> employees = (List<Employee>)extensions.get(Employee.class);
for (Employee emp : employees){
emp.setSalary(raiseAmount);
}
}
答案 1 :(得分:0)
扩展列表元素不熟悉setSalary方法,应将其强制转换为Employee对象
(((Employee)extensions.get(key))。setSalary(raiseAmount);