在Java中,如何创建与';相同类型的新类;这';上课?JAVA
我有一个简单的场景。我想为下面的类创建一个新实例在Java中,如何创建与';相同类型的新类;这';上课?JAVA,java,class,instance,Java,Class,Instance,我有一个简单的场景。我想为下面的类创建一个新实例 class A implements Fancy { void my() { Fancy b = // new X(); where X could be A or B } } 当您有一个B同时实现Fancy时。使用Create方法创建一个抽象类AbstractFancy: abstract class AbstractFancy implements Fancy { abstract Fancy cre
class A implements Fancy {
void my() {
Fancy b = // new X(); where X could be A or B
}
}
当您有一个
B
同时实现Fancy
时。使用Create
方法创建一个抽象类AbstractFancy
:
abstract class AbstractFancy implements Fancy {
abstract Fancy create();
void my() {
Fancy b = create();
//....
}
}
class A extends AbstractFancy {
Fancy create() {
return new A();
}
}
class B extends AbstractFancy {
Fancy create() {
return new B();
}
}
在每个类中执行create
方法:
abstract class AbstractFancy implements Fancy {
abstract Fancy create();
void my() {
Fancy b = create();
//....
}
}
class A extends AbstractFancy {
Fancy create() {
return new A();
}
}
class B extends AbstractFancy {
Fancy create() {
return new B();
}
}
深思熟虑地?(不推荐)
如果有一个基于零参数的构造函数(隐式或显式),这将起作用。确保围绕语句执行try{}catch{}
其他方式:
class A implements Fancy, Cloneable {
void my() {
try {
Fancy b = (Fancy) clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
或者,您可能需要一个生成器来创建一个新的
Fancy
对象。我假设您希望my()
在基类中定义,例如FancyAdapter
,它具有不同的子类,并且您希望它创建实际子类的实例。如果您可以假设所有实现Fancy
的类都有一个默认(无参数)构造函数:
Fancy b = (Fancy) getClass().newInstance();
问题到底是什么?如果b实现了Fancy,为什么不能直接说Fancy b=new b()?因为我不想要a b,我总是想要运行my的类型。仍然不清楚您想要什么!你知道Java中的关键字this吗?它指的是正在运行的对象。我想实例化一个与运行对象类型相同的类。你现在明白了吗?@antonioP upvoting。。。这可能很有用……
A implements Fancy
意味着Fancy
是一个接口
,而不是抽象类
@Thilo:I将Fancy
更改为抽象类
,以便可以直接添加create
方法。无论如何更新…@dacwe您的类A
和B
应该扩展AbstractFancy
,而不是Fancy
@Jesper:Updated!一开始就不应该屈服于编辑的压力…@dacwe,我能问一下为什么我的问题被否决了吗?我能想到的是幻想=新的这个;但这当然是违法的。