用D表示的Java解决方案(反射)

发布于 2024-11-16 14:53:49 字数 350 浏览 1 评论 0原文

我正在D中重新实现一个java程序。我使用了工厂模式, 即从数据“myclass”“5.3,6,8,10”中,我使用反射来调用构造函数

myclass(5.3 ,6,8,10);

在D中如何解决同样的问题,即给定一个类名,以及参数 构造函数采用(仅基元),通过在参数中调用构造函数来创建该类的实例?

一个明显的解决方案如下:制作一个巨大的 switch/case 语句, 以类名作为大小写,并使构造函数采用 double[] 作为参数。 这很丑陋,因为我需要将每个新类添加到这个列表中。

我可能会强制每个类将自己静态添加到某个全局映射中, 以某种方式将类名映射到构造函数。

I am reimplementing a java program in D. I have used the factory pattern,
that is, from the data "myclass" "5.3 ,6,8,10", I use reflection to call the constructor

myclass(5.3 ,6,8,10);

How can I solve the same problem in D, that is, given a class name, and the parameters
the constructor takes (only primitives), create an instance of that class by calling the constructor in the parameters?

One obvious solution is the following: Make a huge switch/case statement,
with class names as cases, and make constructor take a double[] as argument.
This is ugly, since I need to add each new class to this list.

I might enforce each class to statically add themself to some global map,
mapping class name to constructor, somehow.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傾城如夢未必闌珊 2024-11-23 14:53:49

您可以有一个包含辅助对象的列表。辅助对象(MiniFactory)基本上有一个测试方法和一个工厂方法,所以你可以说:

for (int i=0; i<max_classes; i++) {
    MiniFactory f = factoryList[i];
    if (f.typeIsMatching(inputString))
        return f.createObject(inputArgs);
}

如果运气好的话,你可以使用模板来定义MiniFactory。

You could have a list with helper objects. The helper objects (MiniFactory) basically have a test method and a factory method, so you can say:

for (int i=0; i<max_classes; i++) {
    MiniFactory f = factoryList[i];
    if (f.typeIsMatching(inputString))
        return f.createObject(inputArgs);
}

With some luck you can use templates to define the MiniFactories.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文