泛型地图 - 避免众多演员阵容

Sna*_*Doc 0 java generics hashmap

我有:

public abstract class Report {
    protected Map<String, Transaction> m = new HashMap<String, Transaction>();
    // more stuff
}
Run Code Online (Sandbox Code Playgroud)

.

public class TRRTransaction extends Transaction {
    public String someMethodOnlyInTRRTransaction() {
        // do stuff
    }

    @Override
    public void someInheritedMethod() {
        // do stuff
    }
    // more stuff
}
Run Code Online (Sandbox Code Playgroud)

.

public class TRRReport extends Report {
    public void doSomething() {
        for (B b : m.values()) {
            query.setString(1, ((TRRTransaction) b).someMethodOnlyInTRRTransaction());
        }
    }
    // more stuff
}
Run Code Online (Sandbox Code Playgroud)

我试图避免必须明确地投入到TRRTransaction所有地方.在我的情况下,TRRReport只会继续处理TRRTransaction它的继承HashMap.还有其他类型的Report子类,每个类只处理它的相关类型Transaction.除了删除HashMapfrom Report并将其本地移动到每个子类中之外Report,我不知道还能做些什么.

我有一个类似的问题,但我想我可能会以错误的方式提出问题并且没有得到一个直接的答案:使用泛型的HashMap

SLa*_*aks 5

你需要使你的类通用:

public abstract class Report<T extends Transaction> {
    protected Map<String, T> m = new HashMap<String, T>();
    // more stuff
}

public class TRRTransaction extends Transaction {
    public String someMethodOnlyInTRRTransaction() {
        // do stuff
    }

    @Override
    public void someInheritedMethod() {
        // do stuff
    }
    // more stuff
}

public class TRRReport extends Report<TRRTransaction> {
    public void doSomething() {
        for (B b : m.values()) {
            query.setString(1, b.someMethodOnlyInTRRTransaction());
        }
    }
    // more stuff
}
Run Code Online (Sandbox Code Playgroud)