java - 以编程方式动态导入

标签 java dynamic import package classloader

我只是想在运行时以编程方式实现该行。

import com.company.package.*;

我不敢相信所有的搜索都会指向Python,而且我当然不希望加载类并一一循环。它一定是一个更快的命令。

有什么建议吗?

P.S:我知道这不是最好的设计,但我是通过 JSP 来实现的,所以也许有某种方法可以在声明中使用参数,如下所示

<%@ page import=%{myPackage} %>

最佳答案

类加载器太动态/灵活,无法满足您的要求。具体来说,没有可移植的方法来列出 ClassLoader 中的目录内容,因此无法确定要加载的完整类集。以下是两个不可移植建议:

  1. 假设您的 ClassLoader 实现 URLClassLoader,然后调用 getURLs,然后假设 URL 为 file: ...或者:
  2. 假设 ClassLoader.getResource("com/company/package/") 将返回一个非空 URL,那么假设 URL 将为 file: (或者 jar: ,然后假设内部 URL 是 file: ,然后提取并使用它)

无论哪种情况,都解析 file: URL(处理URL解码),列出目录/JAR的内容查找所有*.class文件。

注意,这基本上就是 Spring classpath*: 的内容确实如此,并且他们在 documentation 中包含了几个可移植性警告由于这些原因。

关于java - 以编程方式动态导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20140316/

相关文章:

Java import jgoodies.forms.factories.* 无法解析。 ( eclipse 月神)

php - 在 Mysql 数据库中插入动态选择框值并显示数据已提交消息

java - 如何读取 <default.package> 中文本文件的内容 [Java]

Python 3 - 模块和包困惑 - 架构

java - c++ 中的 clock() 时间与 java 中的 System.CurrentTimeMillis() 之间的时差

java - 保持文本检索的正确风格

Java:如何启用JIT?

c++ - 错误动态数组

c# - PdfSharp:动态生成文档

c++ - 如何在 Objective C++ header 中包含 C++ header ?