在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,我能问一下为什么我的问题被否决了吗?我能想到的是幻想=新的这个;但这当然是违法的。