扩展paramater类/接口的java基类

扩展paramater类/接口的java基类,java,multiple-inheritance,Java,Multiple Inheritance,我有一些基类实体。我想允许实体的用户创建扩展某些给定超类T的实体实例(就好像实体的声明是类实体扩展T)。我不知道T实际上是什么,所以我希望实体在这方面是模块化的。如果这不可能,我也可以使用实体实现给定的接口T 像公共类实体扩展T和公共类实体实现T这样的事情不起作用。(“不能将类型参数T作为超类型引用”) 因此,我的问题是: 1) 这在java中完全可以实现吗?其他语言 2) 如果是,怎么做 3) 通常,当java遇到这样的障碍时,这意味着我的设计出了问题,那么您将如何创建此功能(我想我要寻找的基

我有一些基类
实体
。我想允许
实体
的用户创建扩展某些给定超类T的
实体
实例(就好像
实体
的声明是
类实体扩展T
)。我不知道T实际上是什么,所以我希望
实体
在这方面是模块化的。如果这不可能,我也可以使用
实体
实现给定的接口T

公共类实体扩展T
公共类实体实现T
这样的事情不起作用。(“不能将类型参数T作为超类型引用”)

因此,我的问题是:

1) 这在java中完全可以实现吗?其他语言

2) 如果是,怎么做

3) 通常,当java遇到这样的障碍时,这意味着我的设计出了问题,那么您将如何创建此功能(我想我要寻找的基本上是实体和T的多重继承,这可以做到吗?)

编辑:澄清-我希望实现类型行为,同时尽可能少地要求调用者(创建T的子类,将调用委托给实体实例会要求调用者提供太多)。没有其他方法可以做到这一点吗?

模板
template <class A>
class B : public A
{
B类:公共A {

至少C++中可能。


我曾经在自己的工作中使用过这两个类,它将行为添加到两个非常密切相关的类(一个继承了另一个类)。这只是在很晚才使我的工作有效。也许你也可以考虑一下。

不,它不是在java中是如何工作的。你可能想考虑合成而不是继承。< /P> 我在这里读到了一些字里行间的东西,但是这些实体在游戏引擎中吗?一个组件系统会很好地工作

这里有一个简单的例子

class Entity {
    List<Component> components;

    void update() {
        for(Component component: components) {
            component.update(this);
        }
    }
}

interface Component {
    void update(Entity parent);
}

class MovementComponent implements Component ...
class AnimationComponent ...
class BehaviourComponent ...
类实体{
列出组件;
无效更新(){
用于(组件:组件){
组件。更新(本);
}
}
}
接口组件{
作废更新(实体母公司);
}
类MovementComponent实现组件。。。
类AnimationComponent。。。
类行为组件。。。

Java不支持多重继承;给定的类不能是多个类的直接子类

但是,如果
实体
是一个接口,则可以使用交集边界来实现

例如,要编写一个方法,该方法接受一个实例,该实例是
SomeClass
的子类(不一定是直接子类),并且实现了
实体

public <T extends Entity & SomeClass> void doSomething(T t) {
}
public void doSomething(T){
}

问题的关键是,当你说要“创建扩展某些给定超类T的实体实例”时。对象(类的实例)从不扩展类。只有类扩展其他类


您可能想要的是使用接口。让实体成为接口,创建实现实体的类,然后实例化这些类。

是的,这在Java中没有意义。类扩展任意类意味着什么?您是否在寻找混合类型的行为?在问题1中,您为什么问“[这在中可能吗]其他语言?”。这难道不是一个真正意义上的
Java
问题吗?我会尝试将任何要注入的超类所需的属性和方法的数量最少的接口放在一起,然后让
实体
实现给定的接口。如果您需要更复杂的东西,那么您可能需要设置up某种类型的工厂。@JackManey我不是在建立工厂,只是不确定具体如何进行。我不能要求对超类进行更改,也不能事先知道它们。我只想能够创建一个超类的实例,该超类也具有我的具体
实体
功能。@OliCharlesworth是的,我想要实现mixin类型的行为,同时尽可能少地要求调用者(创建T的子类,将调用委托给
实体
实例将对调用者的要求过高)。没有其他方法可以做到这一点吗?我猜(我没有投你反对票)你只回答了问题1的一小部分,而这一小部分并不特别有用。@Gregkopf:很公平。但这至少是一个部分答案,绝对没有错。在我的书中不值得投反对票。+1用于字里行间的阅读。但它实际上是一个库的一部分,应该补充现有的游戏引擎。现有的game引擎通常有自己的一些具体的
实体
类。我想允许库的用户创建他们的游戏引擎
实体
s的实例,这些实例也具有我的
实体
类的功能。但实体不是也不能是接口。它具有我希望附加到其他任意类..合成和注释处理可能是你最好的选择啊.注释处理似乎很有希望.我会试试.谢谢。