gpt4 book ai didi

java - 扩展 Java Play 框架中的默认访问第三方方法

转载 作者:行者123 更新时间:2023-12-01 10:21:56 27 4
gpt4 key购买 nike

因此,我在 Play 应用程序中使用第三方库(即 Echo Nest Java API)。库公开某些方法的方式存在一些疏忽,我需要特别修改一个方法,其中涉及使用具有默认访问权限的构造函数。

我最初认为在同一个包中创建一个类来扩展我需要修改的类就可以解决问题,但 Java 的运行时包处理似乎阻碍了这种尝试(也就是说,因为正在使用不同的类加载器)对于两个不同的类,它们位于同一个包中是不够的)。我有一些可能修改我的子类或 Echo Nest 库的类加载器的想法,但几乎不知道如何去做,也不知道是否有更好的解决方案可用。

任何正确方向的指针将不胜感激!

最佳答案

事实证明,解决方案是使用 Play 的默认类加载器加载库类,将构造函数设置为可访问,然后使用 newInstance() 实例化库类。一些代码,以防其他人遇到类似的问题:

// Use the default application classloader to load the library class
Class artistClazz = Play.application().classloader().loadClass("com.echonest.api.v4.Artist");
// Get the package private constructor that we need
Constructor<Artist> constructor = artistClazz.getDeclaredConstructor(EchoNestAPI.class, Map.class);
// Make sure it's accessible to this class
constructor.setAccessible(true);
return constructor.newInstance(this, (Map) mq.getObject("artist"));

我无论如何都不相信这是解决这个问题的最佳或最干净的解决方案,但它对这个修改后的子类之外的代码的影响最小,所以我现在可能会坚持使用它。

关于java - 扩展 Java Play 框架中的默认访问第三方方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35541691/

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