【发布时间】:2014-04-28 19:33:26
【问题描述】:
我在 C++ 中有以下类
ParentClass
{
virtual int MyMethod();
}
class ExistingOne : ParentClass {...}
class ExistingTwo : ParentClass {...}
现在我想创建一个类,它可以扩展现有类中的任何一个并覆盖它们的几个方法,并在某些条件下调用现有类中的方法。
在 C++ 中,这是通过以下方式完成的:
template< class BaseTemplate >
class MyClass : public BaseTemplate
{
int MyMethod()
{
DoSomething();
return BaseTemplate::MyMethod();
}
}
这是如何在 Java 中完成的?
目前为止
public abstract class ParentClass
{
public abstract int MyMethod();
}
public class ExistingOne extends ParentClass {...}
public class ExistingTwo extends ParentClass {...}
public class MyClass<T extends ParentClass>
{
public int MyMethod()
{
DoSomething();
return T.MyMethod(); //MyMethod must be statically defined?
}
}
哦,最后,我无法修改“现有”或父类。
那么这是正确的方法吗?如何解决静态需求?
【问题讨论】:
-
与 c++ AFAIR 相比,Java 在 'generic' 类和接口方面的能力很差。
-
@πάνταῥεῖ 这不是关于能力差,而是错误的设计。
-
@LuiggiMendoza 这只是一个意见。你说的可能是真的......
-
@πάνταῥεῖ 好吧,IMO 你的观点看起来更像是对 Java 的咆哮。如果这不是您的意图,请考虑删除评论或进行相应的编辑。
-
@LuiggiMendoza 这并不是真正的咆哮,而是我更喜欢 c++ 而不是 java 的原因之一。他们在各种问题领域中都有自己的位置。我只是说,直接的元编程并不是 Java 编程的优势之一(尽管这在 Java 环境中根本不那么重要)。
标签: java c++ templates generics inheritance