我有一个abstract class有一种abstract方法.我想此方法return的相同的数据类型,其重写方法的类,而无需强制转换的结果create或具有使在每个子类的新方法声明.我希望它可以从父类中无缝地声明.
我希望该方法返回一个对象,其数据类型与调用它的类相同.
编辑:我删除了印刷品,因为人们对我的要求感到困惑
abstract class A
{
public abstract ... create();
}
class B extends A
{
@override
public ... create()
{
return new B...;
}
}
class C extends A
{
@override
public ... create()
{
return new C...;
}
}
Run Code Online (Sandbox Code Playgroud)
这样
B x1 = new B();
B x2 = x1.create();
// Since create was called on a B object
// a B object is returned, NOT AN "A" object
C y1 = new C();
C y2 = y1.create();
// create makes a C object this time,
// because it's called on a C object
// Problem: create() returns A object, even when
// called from class B or C.
// I want create() to return a B object if called from a B object.
Run Code Online (Sandbox Code Playgroud)
这会是一个好方法吗?谢谢.
我不再认为这是正确的答案.这是一个答案,但过于复杂.看到我的其他答案.
Java的泛型中没有"自我"类型的概念.你能做的最好就是使用自我限制的泛型:
abstract class A<T extends A<T>>
{
public abstract T create();
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的子类中:
class B extends A<B>
{
@override
public B create()
{
return new B...;
}
}
Run Code Online (Sandbox Code Playgroud)