java - 使用泛型更好地解决这个问题

标签 java generics

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

下面是一些概述问题的伪代码:

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();
    }
}

最佳答案

您可能想要的是一个通用接口(interface):

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();
    }
}

关于java - 使用泛型更好地解决这个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8526181/

相关文章:

java - 过滤器/组件模式而不是笨拙的继承?

java - Java 中的泛型(和通配符)

java - 方法与类型中的另一种方法具有相同的删除 - 第 2 部分

c# - 冗余的通用约束?

java - 调用 `setText()` 时 JTextfield 未更新

Java 桌面通知 Ubuntu

java - 如何使用 Guice 将必要的对象注入(inject) AspectJ 方面

java - 有没有办法处理Java堆空间异常

generics - 类型推断: Using generic methods with implicit type conversion

java - 创建泛型数组的两种方法