问题标签 [dynamic-class-creation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 使用 Java 反射来确定要实例化哪个类
有一个 Message 超类,还有各种 Message 子类,如 WeddingMessage、GreetingMessage、FarewellMessage、Birthday Message。
Message 超类有一个构造函数:
消息子类都有不同的构造函数,但是它们都调用超类,在那里它们将 messageType 作为参数传递 例如:
创建的 messageType 由用户传入的参数确定。例如,如果用户插入“birthday John 12”,那么将使用参数 John 和 12 创建 BirthdayMessage。如果用户输入“Farewell Grace take care”,则使用这些参数创建 FarewellMessage 的实例。
而不是一堆 if/else 语句或 switch case,以类似的形式 -
ETC
我如何使用反射来确定要创建哪种类型的 Message 类。我目前的想法是使用 File 类来获取包中包含消息子类的所有文件。然后使用反射来获取它们的每个构造函数参数类型,并查看它们是否与用户输入给出的参数匹配。然后用随机参数创建那些匹配类的实例。完成后,子类将使用其 messageType 调用其超类构造函数。然后我可以检查 messageType 变量是否与用户输入匹配。
因此,如果用户输入“birthday john 23”,我会在包中找到所有构造函数,它们以 String 和 int 作为参数并且具有字段 messageType(继承自 Message)。然后我创建该类的一个实例并检查 messageType 是否 == 到用户输入中的第一个单词(在本例中为生日)。如果是,那么我使用用户提供的参数创建该类的实例。
有没有更好的方法通过反射来做到这一点?
c# - 基于字符串参数的动态类
我有这个:
其中字符串 prpClass 可以是“Blah”或“Doh”。
根据字符串 prpClass 的内容,我希望 List 类型为 Blah 或 Doh 类。
我怎样才能做到这一点?
编辑:
java - 超类不可分配给 asm 在运行时实现的类
我有一个由内部接口组成的 java 类,并计划在运行时使用 asm 字节码注入来实现实现类。
我确定我的 asm 代码是正确的,但问题是在定义类并调用 Class.forName("my.example.X$XImpl") 之后,我收到以下错误:
我的猜测是 Y 类在运行时还不可用?我不知道..任何帮助将不胜感激!
编辑:我加载 XImpl 的方式非常简单:
我确定我的字节码和类加载方法是正确的原因是因为如果我在不扩展任何其他类的情况下定义实现类,它将正常工作
java - Java基于枚举类型创建对象的方法
我的课是这样的:
我对每个子类(id + class)都有一个枚举:
然后我按如下方式使用它们:
它工作得很好,但我想知道这是否是一种基于整数 id 创建数据的 Java-ist 方式?有什么不好的事情应该寻找吗?
有没有办法强制传入的类是 X 类型而没有冗长的 if-else 条件?当我有大量子类时想想。
为什么要处理整数 ID?
我正在编写某种解析器,因此我需要将从某处获取的整数 id 转换为适当的对象。
java - 无法在动态生成的类上调用 newInstance()
我开始使用 asm 在运行时生成类。我从一个非常简单的类开始,它只有一个 String 字段和一个 getter。
创建字节数组后,我创建了一个自定义类加载器并调用它的 defineClass 方法来获取 Class 对象。
然后我在这个对象上调用 newInstance() 但我得到了一个 InstantiationException。当我调试代码时,我发现它没有为新创建的类找到构造函数!
我也应该为该类生成一个构造函数吗?
javascript - Viewmodel 属性“链接”找不到模型类型
在尝试执行以下代码时,如果属性由类指定或由实体名称指定,则show()
该links
属性无法找到模型。
如果我们注释links
代码的一部分,其余的工作正常。
这是异常的有趣部分:
如果您深入研究源代码,您会发现检查是否myapp.model.film.Film
是类的 if 语句失败..
python - 迭代字典列表并在 Python 中转换为对象
假设我有一个字典列表,例如:
我有一些对象,例如:
我想遍历列表,然后根据条件,假设:
我可能有很多课。如果/elif 选择正确的对象,我该如何避免这个非常长的时间?有没有动态的方法来实现这一目标?更好的是,我是不是太聪明了,没有为每种类型的对象明确选择和设置?
每个对象可能有 10 多个要设置的属性,而且这个 if/elif 块非常长并且难以阅读/维护。
更新:
最有可能的答案是,我完全错了。我最初的目标是拥有这个嵌套字典,并且我想以特定的方式“清理”/增强每个字典元素。也许对于具有 'type'=='type_a' 的元素,我想添加几个新键。如果'type'=='type_b',也许我想编辑一两个键的名称。如果'type'=='type_c',我想编辑某个键的值等。可能有 30,40 种或 50 种不同的类型。所以我从一个“凌乱”的嵌套字典开始,然后取回一个“干净”的字典,修改了我的方式。
我最初的方法是为每种类型设置一个类。然后每个类都可以有自己的@property
修饰方法来以特定的方式设置某些属性。它们都继承自同一个基类,该基类有一个方法,该方法返回一个字典,其中所有属性作为键。
pug - 在 Jade/Pug 中创建动态类
我正在尝试将动态类添加到玉模板。像这样:
但编译器对此表示例外:
我已经尝试了我能想到的一切。一直在搜索https://pugjs.org/language/interpolation.html。真的可以用手。
谢谢。
c# - 从 XElements 动态创建列表
我正在将一堆 XML 文件读入 XElements 列表(实际上是 IEnumerable)。然后我想将 XElement 列表(这些 XElement 包含一堆子元素)转换为类列表,这样我可以更轻松地对数据进行后续操作。
现在,如果我事先知道 XElements 的结构,这将很容易;我只是创建一个模仿 XElement 结构的类,并用 XElement 内容填充它的实例。但这是警告;我的 XML 文件元素结构大多相似,但可能存在结构不同的奇数元素。为了更好地说明这种情况,让我举个例子。
假设我的 XML 文件包含一堆“Person”元素。Person 元素有一些共同的元素,它们将在所有元素中,但有一些 Person 的子元素只能在某些元素中找到。
例如,所有 Person 元素都有这些强制性子元素:
但是,一些 Person 元素可能包含额外的子元素,如下所示:
更糟糕的是,这些子元素也可能具有大部分相似的结构,但偶尔会有所不同。
那么有没有一种方法可以让我在一个循环中遍历这些 XElement,并将它们放入一个以某种方式动态创建的实例中,例如,基于元素名称或类似的东西?我可以创建一个包含所有必需元素的类,并为奇怪的新元素留下一些额外的成员变量,但这并不理想,原因有两个:第一,这会浪费空间,第二,子元素可能比我班级中的额外变量要多。
所以我正在寻找一种方法来动态创建类实例以适应 XElement 结构。换句话说,我真的很想模仿元素结构直到最深层次。
提前致谢!