Java继承约束

Eri*_*ric 2 c# java inheritance type-constraints

我试图将我在C#中编写的一些代码移植到Java,但还不知道所有的Java语法.我也不知道这种类型的东西叫什么,所以搜索起来比较困难.我称之为"继承约束".

基本上,是否存在与此C#代码等效的java:

public abstract class MyObj<T> where T : MyObj<T>, new()
{

}
Run Code Online (Sandbox Code Playgroud)

谢谢.


编辑:

有没有办法做到这一点:

public abstract class MyObj<T extends MyObj<T>> {
    public abstract String GetName();

    public virtual void Test() {
          T t = new T();                // Somehow instantiate T to call GetName()?
          String name = t.GetName();
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

不完全的.有这个:

public abstract class MyObj<T extends MyObj<T>>
Run Code Online (Sandbox Code Playgroud)

但是没有相当于new()约束的东西.

编辑:要创建一个实例T,你需要适当的Class<T>- 否则类型擦除将字节你.

通常,您将其添加为构造函数参数:

public MyObj(Class<T> clazz) {
    // This can throw all kinds of things, which you need to catch here or
    // propagate.
    T t = clazz.newInstance(); 
}
Run Code Online (Sandbox Code Playgroud)

  • @Eric:不,并且出于同样的原因:静态方法不是多态的.多态性基于*实例*的执行时类型而发生.将编辑我的答案来解释实例化`T`. (2认同)