我有n个java类,每个包含自己的一组变量。 我有一种方法,必须接受这些n类之一作为基于某些条件的参数。 如何将所有这些类作为子类创建为泛型类型,以便我的方法签名接受所有这些不同的类型?我不想重载该方法。如果使用类型'Object'作为参数,我正在失去我传递的输入参数类的性质。如何将所有类放在一个通用类类型下?
回答
这是你想要的吗?
public interface common<T extends common<?>> {
public void commonMethod(T param, ...);
}
public class child implements common<child> {
public void commonMethod(child param, ...) {
...
}
}
定义所有类实现的接口。然后在方法头部声明你的参数作为该接口的类型。
我试过这种方法。但是我必须明确地在方法内部强制类型转换以恢复其行为。 – user811433 2012-03-01 08:51:56
不,如果接口定义了您需要的所有方法,则不需要转换。同样所有的类都应该有共同的东西(因此界面),否则你的设计可能是错误的,或者你应该考虑超载。 – m0skit0 2012-03-01 08:57:23
那你想要什么?你在寻找“如何编写一个接受泛型类型的方法,而不需要转换它就可以接受所有子类的所有方法?” : - ? – 2012-03-01 09:03:19
如何将所有这些类作为子类变为泛型,以便我的方法签名接受所有这些不同类型?
简单地做一个抽象类,MySuperClass
,这个类被所有你想传递给方法的类继承。这个超类有共同的功能和属性。
另一种方式,如果你的子类可能会扩展其他类;或者,班上没有什么共同之处(除了事实上他们都传递给你的方法),你可以有一个接口,说MySuperClass
(理想情况下,我喜欢从我开始接口,如IMySuperClass
)。
我不想重载该方法。
一旦您拥有了超级课程或接口,您的方法签名看起来就像myMethod(Param1 val1, MySuperClass myObj, Param3 val3)
。
简单。
与实现接口相同。我不得不在方法中明确地键入cast。 – user811433 2012-03-01 08:54:02
如果没有共同的功能,我建议重载该方法。如果有共同的功能,那么抽象事物并传递给相同的方法是有道理的。 – Nishant 2012-03-01 08:57:47
如果你不能使用多态(由其他人的建议),那么你可以使用Java泛型做到这一点:
例如这可以用来将任何对象放入缓存中:
public <T> void doSomethingWithObject(final T object) {
...
}
你可以这样称呼它:使用字符串
yourInstance.<String> doSomethingWithObject(object);
- 1. 如何获得一个类扩展的所有类的类型[]
- 2. Java将所有数据类型放在一个数组中
- 3. Android:如何将类类型放入一个包中?
- 4. 如何有一个泛型类型从一个泛型类型
- 5. 如何为所有数字类型制作通用类?
- 6. 如何设置一个类型的约束,所以它必须是另一种通用类型的类型
- 7. 如何投放类型,它的通用基类型
- 8. 如何创建将接受所有类型的类的通用列表参数?
- 9. 如何将所有子类别复制到另一个类别
- 10. 如何在我自己的类型类中为所有类型声明类型类型的实例(如显示)?
- 11. 在Windsor注册一个开放的泛型类型组件,用于开放泛型类型的通用服务
- 12. 如何通过传递类型与泛型类型返回一个类
- 13. 得到一个类的类型参数,通过了解只有类的类型
- 14. XmlSerializer/StreamWriter将多个类型/类放入同一个xml文件
- 15. 在Python中使用类型类创建一个类型类
- 16. 如何在通用类中使用类类型
- 17. 在Haskell中,我如何将一个类型类与该类型类的一个实例进行匹配?
- 18. 将一个类的所有成员添加到另一个类
- 19. 将所有方法从一个类复制到另一个类
- 20. 如何在Eclipse IDE中打开一个类型的所有子类?
- 21. A类有一个类型参数,但B类有一个
- 22. 如何将所有字段定义从一个模型类复制到另一个模型类?
- 23. 如何在一个类图中显示所有类
- 24. 如何获得一个类的所有子类在PHP
- 25. 如何获得一个类的所有子类(在AS3中)
- 26. 得到一个类具有相同的另一类的通用类型
- 27. 声明类型类的所有实例都在另一个类型类中,但不修改原始类声明
- 28. 如何在使用通用类型时指定匿名类型的类型
- 29. 通用类型作为通用类型
- 30. 有没有办法在一个超类定义一个通用的方法来引用继承类的类型?
这看起来很有希望。我会试试这个 – user811433 2012-03-01 17:11:47