如何将所有类放在一个通用类类型下?

时间:2012-03-01 08:47:14

标签: java class generics subclass

我有n个java类,每个类都包含自己的一组变量。 我有一个方法必须接受这n个类中的一个作为基于某些条件的参数。 如何将所有这些类作为泛型类的子类,以便我的方法签名接受所有这些不同的类型?我不想重载该方法。如果对参数使用'Object'类型,我将失去我传递的输入参数类的性质。

4 个答案:

答案 0 :(得分:3)

定义所有类实现的接口。然后在方法头部声明您的参数作为该接口的类型。

答案 1 :(得分:2)

这是你想要的吗?

public interface common<T extends common<?>> {
    public void commonMethod(T param, ...);
}

public class child implements common<child> {
    public void commonMethod(child param, ...) {
        ...
    }
}

答案 2 :(得分:1)

  

如何将所有这些类作为泛型类的子类,以便我的方法签名接受所有这些不同的类型?

简单地创建一个抽象类MySuperClass,此类将由您希望传递给Method的所有类继承。这个超类具有共同的功能和属性。

另一方面,如果您的子类可能会扩展其他类;或者,类中没有任何共同点(除了它们都传递给你的方法的事实)你可以有一个接口,比如MySuperClass(理想情况下,我喜欢从I开始的接口,比如{ {1}})。

  

我不想重载该方法。

准备好超类或界面后,您的方法签名看起来就像IMySuperClass

简单。

答案 3 :(得分:1)

如果您不能使用多态(如其他人所建议的那样),那么您可以使用Java泛型来执行此操作:

E.g。这可以用于将任何对象放入缓存中:

public <T> void doSomethingWithObject(final T object) {
    ...
}

你可以这样称呼它:例如使用String

yourInstance.<String> doSomethingWithObject(object);