gpt4 book ai didi

java - 在此 java 示例中使用类而不是实际类型的原因是什么?

转载 作者:行者123 更新时间:2023-11-29 08:18:49 25 4
gpt4 key购买 nike

我已经看到这种“设计模式”(不知道还能调用它什么......模板?)在 Java 代码中不止一次出现。预计应用程序将被扩展并包含一个主要方法。我无法弄清楚在 start 方法中使用 Class 而不是 AppFrame 有什么好处,因为无论如何它只是类型转换为 AppFrame 。这一切似乎毫无意义,也许有人可以告诉我。

public class Application {

public static class AppPanel extends JPanel {
//stuff
}

public static class AppFrame extends JFrame {
protected AppPanel mainPanel;
//more stuff
}

public static AppFrame start(Class appFrame) {
try {

final AppFrame frame = (AppFrame) appFrame.newInstance();
java.awt.EventQueue.invokeLater(new Runnable()
{
public void run()
{
frame.setVisible(true);
}
});
return frame;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

public static void main(String[] args){
Application.start(AppFrame.class);
}
}

最佳答案

我也看到过这种情况,尤其是在相当古老的示例中。

这个想法似乎是一切都从一个静态调用开始,用户不会在堆上创建任何东西。相反,“应用程序框架”以某种方式实例化它需要的东西,而用户只指示要使用的具体实现。因此,用户指示要使用的类,但实际上还没有实例化。这样做的一个风险是您可能会转移其实例不可转换为 AppFrame 的类。这可能会导致异常。

我个人认为这种丑陋的设计。在更常见的通过类对象(如 Smalltalk 或 Python)直接实例化类的语言中,这很有意义。在 Java 中,我认为坚持使用工厂接口(interface)更笨重但更面向对象。

关于java - 在此 java 示例中使用类而不是实际类型的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2053131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com