使用泛型可以更好地解决这个问题

Zug*_*dud 2 java generics

我很确定我可以用Java泛型来解决这个问题,所以我想问一下......假设我有一些类,每个类都实现了一个公共接口,在公共接口中有一个方法叫做getData,我想要制作通用.我遇到的问题是每个类都返回一个不同的对象类型,所以理想情况下我希望它们是通用的,然后在调用的实现类中getData,将它们转换回原始类型.如果我要转换Object为特定类型并返回特定类型,我可以看到它是如何工作的,但是我能用Generics完成相同的最终结果吗?

这里有一些伪代码来概述问题:

public ClassA implements interface x {

    private CustomObjectA customObjectA;
    private Map<DateTime, Map<String, CustomObjectA>> dataMap;

...

    public Map<DateTime, Map<String, CustomObjectA>> getData() {
        return this.dataMap;
    }
}

public ClassB implements interface x {

    private CustomObjectA customObjectB;
    private Map<DateTime, Map<String, CustomObjectB>> dataMap;

...

    public Map<DateTime, Map<String, CustomObjectB>> getData() {
        return this.dataMap;
    }
}

public interface x {
    public Map<DateTime, Map<String, genericObject>> getData();
}


public ClassC {
    public testGeneric(x objX) {

        CustomObjectA cOA = objX.getData();
        CustomObjectB cOB = objX.getData();
    }
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 5

您可能想要的是通用接口:

public interface X<T> {
    Map<DateTime, Map<String, T>> getData();
}

public class A implements X<CustomObjectA> {
    @Override
    public Map<DateTime, Map<String, CustomObjectA>> getData() {
        ...
    }
}

public class B implements X<CustomObjectB> {
    @Override
    public Map<DateTime, Map<String, CustomObjectB>> getData() {
        ...
    }
}

public class C {
    public static void main(String[] args) {
        X<CustomObjectA> a = new A();
        Map<DateTime, Map<String, CustomObjectA>> m1 = a.getData();
        X<CustomObjectB> b = new B();
        Map<DateTime, Map<String, CustomObjectB>> m2 = b.getData();
    }
}
Run Code Online (Sandbox Code Playgroud)