我正在尝试使用模板设计模式,所以我使用抽象类来定义我的算法:
abstract class MyTemplate
{
public void execute()
{
//... do something
doSomething();
}
public abstract void doSomethig();
}
在我的代码中,我每次都会创建一个MyTemplate实例:
MyTemplate cleanUp = new MyTemplate()
{
public void doSomething()
{
// execute cleanup
}
}
cleanUp.execute();
为JVM创建一个昂贵的抽象类对象?
谢谢,
Sean Nguyen
答案 0 :(得分:6)
不,编译器在编译时生成匿名内部类。实例化此类的对象并不比任何其他类更昂贵。
答案 1 :(得分:4)
你并没有真正创建一个抽象类实例。您正在创建一个具体类的实例,该实例在代码中没有名称,由Java编译器创建。
JVM并不真正了解或关心它 - 因此它只是创建一个恰好是抽象类的子类的任何其他类的实例。所以不要冒汗吧。)
答案 2 :(得分:3)
在内部,JVM通过让Java编译器为您即时创建的匿名类创建新的.class文件,然后实例化该类型的新对象来实现此行为。因此,将新类加载到JVM中需要(非常小的)一次性成本,但从那时起,创建新对象的成本与创建任何其他对象的成本相同。
换句话说,不,这段代码没有引入很大的低效率。