用泛型类型java扩展类

用泛型类型java扩展类,java,templates,generics,inheritance,multiple-inheritance,Java,Templates,Generics,Inheritance,Multiple Inheritance,我正在尝试用java执行以下操作: public class ClassName<E> extends E 难道java就不能做到这一点吗如果是,我将如何实现这一效果? 它在C++中完美无瑕,模板,类似: template<typename E> class ClassName: public E 模板 类名:public E 我真正想要实现的是,能够以这种方式将类链接在一起,以实现java中多重继承的效果。java无法做到这一点-这是因为类型擦除。当编译Java类

我正在尝试用java执行以下操作:

public class ClassName<E> extends E
难道java就不能做到这一点吗如果是,我将如何实现这一效果? 它在C++中完美无瑕,模板,类似:

template<typename E>
class ClassName: public E
模板
类名:public E

我真正想要实现的是,能够以这种方式将类链接在一起,以实现java中多重继承的效果。

java无法做到这一点-这是因为类型擦除。当编译Java类时,泛型类型(E)被更改为一些具体的类/接口-编译器必须能够确定类型是什么。另外,Java不支持多重继承-类只能扩展一个类(但它可以实现多个接口)。

Java不能做到这一点-这是因为类型擦除。当编译Java类时,泛型类型(E)被更改为一些具体的类/接口-编译器必须能够确定类型是什么。而且,Java不支持多重继承-类只能扩展一个类(但它可以实现多个接口)。

无论好坏,Java中都没有多重继承。
Java
中的泛型远远不同于
C++
中的泛型。它们只是给你编译类型的安全性。在运行时,泛型信息被删除。

无论好坏,Java中都没有多重继承。
Java
中的泛型远远不同于
C++
中的泛型。它们只是给你编译类型的安全性。在运行时,泛型信息将被删除。

您无法执行此操作,因为
E
未定义类型/类。要实现多重继承,您可以使用
接口。
这是合法的方式。

您不能这样做,因为
E
没有定义类型/类。为了获得多重继承,可以使用接口> ./COD>这是合法的方式。在C++模板中,

< P>有不同的类在编译时创建,即对于每一个E,您将获得不同版本的<代码> CordNeX 在Java中,有一个类具有该名称,泛型类型仅用于编译时的类型检查。因此,Java不能让您从类型E扩展,因为在这种情况下,编译器必须创建多个实例


此外,泛型类型也可以是接口,
类ClassName extensed Serializable
根本不会编译。:) >在编译时产生不同类的效果,即对于每一个E,您将得到不同版本的<代码> CordNeX 在Java中,有一个类具有该名称,泛型类型仅用于编译时的类型检查。因此,Java不能让您从类型E扩展,因为在这种情况下,编译器必须创建多个实例


此外,泛型类型也可以是接口,
类ClassName extensed Serializable
根本不会编译。:)

但是,我必须到处复制相同的代码,这是一种糟糕的做法?@Skeen,在一个类中实现所有这些方法,并在需要这些方法的类中进行扩展。或者你也可以使用对象来调用已经定义的方法。问题是,我需要在几个已经扩展的类中使用这个类,所以我想这就是为什么我要这样做。Petar提供的链接给了我一个解决方案。但是我必须到处复制相同的代码,这是不好的做法?@Skeen,在单个类中实现所有这些方法,并在需要这些方法的类中进行扩展。或者你也可以使用对象来调用已经定义的方法。问题是,我需要在几个类中使用这个类,这些类已经扩展了,所以我想这样做。Petar提供的链接给了我一个解决方案。那么,我将如何实现想要的效果?@Skeen-看这里-。我明白了,所以我只需要做包装器函数。那么,我怎样才能达到想要的效果?@Skeen-看这里-。我明白了,所以我只需要做包装器函数。不知怎的,我偶然发现了这个老问题,不知道为什么这不是公认的答案。不知怎的,我偶然发现了这个老问题,不知道为什么这不是公认的答案。
template<typename E>
class ClassName: public E