当前位置: 首页 > 面试题库 >

是否有用于Java反射的常规“后端”库

梅逸清
2023-03-14
问题内容

我目前正在使用以Java实现的专用,解释性编程语言。作为该语言的一小部分,我想添加对Java进行调用的功能。在深入思考所有细节之前,我想知道是否有人知道通用库来进行反射性调用Java代码的“后端”部分。

也就是说,我将字符串(我定义了语法)解析为表示Java方法调用(或构造函数或字段访问)的某种数据结构,然后将该数据结构传递给该调用调用并返回结果的库。特别是,我希望它已经能够处理所有我不想弄清楚的极端情况:

  • 根据参数的类型自动选择正确的方法(例如智能的Class.getDeclaredMethod())
  • 处理数组和普通对象引用之间的区别
  • 等等

我花了一些时间在JVM上研究动态语言的实现,但是这些通常比我正在寻找的复杂得多,或者针对特定的语言进行了高度优化。

另一个选择是将我的语法转换为某种动态语言的字符串,然后使用Rhino或其他东西来调用它,但这比我要找的要多一些开销。

谢谢!


问题答案:

只是对您自己的答案的评论;实际上,beanutils支持在给定一组参数的情况下获得“紧密匹配”。请参见getMatchingAccessibleMethod()

BeanUtils非常强大,并且具有许多用于检查类的实用程序方法。构造函数自然也可以使用相同的支持。



 类似资料:
  • 来自Liskov替代原理-www.blackwasp。co.uk 不符合LSP的一个常见指示是当客户端类检查其依赖项的类型时。这可以通过读取人为描述其类型的对象的属性或通过使用反射来获得类型。通常,根据依赖项的类型,将使用开关语句执行不同的操作。这种额外的复杂性也违反了打开/关闭原则(OCP),因为随着更多子类的引入,客户端类需要修改。 以下技术(使用反射)是否会导致违反LSP? 依赖注入 注:我

  • 问题内容: 我试图在我创建的特定Java类对象上列出方法列表,并尝试对其进行单元测试。 它无法说无法找到带有“ java.lang.ClassNotFoundException:类com.jr.freedom.user.User”的类。 这是测试代码: 我的项目包如下所示: 在项目文件夹中:src test User类位于src> com> jr?freedom> user(代表com.jr.fr

  • 问题内容: 什么是java反射,为什么有用? 问题答案: 名称反射用于描述能够检查同一系统(或本身)中其他代码的代码。 例如,假设你在Java中有一个未知类型的对象,并且你想在该对象上调用“ doSomething”方法(如果存在)。除非对象符合已知的接口,否则Java的静态类型化系统并不是真正为支持该类型而设计的,但是使用反射,你的代码可以查看该对象并确定其是否具有名为“ doSomething

  • 问题内容: 我正在寻找一个表示分数(有理数)的Java库。例如,如果我要存储分数,那么它将不会被保存,因为它将失去其准确性。 这是我希望在此类库中找到的一些功能: ,,, 尽管我想知道是否已经存在类似的东西,但我可以自己实现这样的库。 编辑: 如果该库还实现(除上述之外)某些数论算法(如等等),那也很好。 问题答案: 该库包括该类。在另外的通常的工厂,存取和操作,可以构建其他有用的实体,包括,和。

  • 问题内容: 可以使用此mp3SPI支持来处理mp3文件,但找不到与mp4文件类似的东西。 任何帮助,将不胜感激。 -更新 我想要做的就是获取文件的大小,就像我使用以下代码处理wave文件一样: - 回答 这是使用@mdma(IBM工具箱)提示的答案代码: - 问题答案: MP4是一种容器格式-为了能够找到内部音频的持续时间,您必须首先从容器中解析出内容。您可以使用isobox mp4parser

  • 所谓反射,是java在运行时进行自我观察的能力,通过class、constructor、field、method四个方法获取一个类的各个组成部分。 在Java运行时环境中,对任意一个类,可以知道类有哪些属性和方法。这种动态获取类的信息以及动态调用对象的方法的功能来自于反射机制。