我有一个需要根据用户输入创建类的用例。例如,用户输入可以是:“(Int,fieldname1):(字符串,fieldname2):..”,则必须在运行时创建一个类,如下所示
Class Some { Int fieldname1 String fieldname2 ..so..on.. }
这是Scala支持的吗?任何帮助都是非常感谢的。
8yparm6h1#
你的设想似乎没有道理。这与其说是运行时示例化的问题,不如说是一个运行时示例化的问题(JVM当然可以通过反射来做到这一点)。实际上,您所要求的是动态生成一个类,这只有在您的代码稍后使用它时才有用。但是,如果您不知道它看起来是什么样子,那么您的代码以后如何利用它呢?例如,后面的代码如何知道它可以引用哪些字段?
qacovj5a2#
不,不太喜欢。类的概念是定义一种可在编译时检查的类型。您看,在运行时创建它可能会与此相矛盾。您可能希望以不同的方式存储用户输入,例如Map。您试图通过在运行时创建一个类来实现什么目标?
voj3qocg3#
我认为这是有意义的,只要您以通用的方式使用您的“数据模型”。这种方法在这里行得通吗?视情况而定。如果您的数据来自在运行时读取但在编译时可用的文件,那么您就幸运了并且*类型安全将得到维护。事实上,您将有两个选择。
否则,如果你的数据“真的”只有在运行时才是可知的,那么@Rob Starling的建议可能会像对我一样适用于你。如果你想当小白鼠,我会和你分享my attempt。为了进行调试,我在里面有一个App.scala,它展示了如何将字符串传递给运行时类生成器,并在运行时使用Java反射访问它,甚至用它定义Scala类型别名。因此,问题是,您的新动态类将在Slick中充当类型参数,还是不能,就像它有时在其他库中所做的那样?
3条答案
按热度按时间8yparm6h1#
你的设想似乎没有道理。这与其说是运行时示例化的问题,不如说是一个运行时示例化的问题(JVM当然可以通过反射来做到这一点)。实际上,您所要求的是动态生成一个类,这只有在您的代码稍后使用它时才有用。但是,如果您不知道它看起来是什么样子,那么您的代码以后如何利用它呢?例如,后面的代码如何知道它可以引用哪些字段?
qacovj5a2#
不,不太喜欢。
类的概念是定义一种可在编译时检查的类型。您看,在运行时创建它可能会与此相矛盾。
您可能希望以不同的方式存储用户输入,例如Map。
您试图通过在运行时创建一个类来实现什么目标?
voj3qocg3#
我认为这是有意义的,只要您以通用的方式使用您的“数据模型”。
这种方法在这里行得通吗?视情况而定。
如果您的数据来自在运行时读取但在编译时可用的文件,那么您就幸运了并且*类型安全将得到维护。事实上,您将有两个选择。
否则,如果你的数据“真的”只有在运行时才是可知的,那么@Rob Starling的建议可能会像对我一样适用于你。如果你想当小白鼠,我会和你分享my attempt。为了进行调试,我在里面有一个App.scala,它展示了如何将字符串传递给运行时类生成器,并在运行时使用Java反射访问它,甚至用它定义Scala类型别名。因此,问题是,您的新动态类将在Slick中充当类型参数,还是不能,就像它有时在其他库中所做的那样?