相关疑难解决方法(0)

查找实现接口的Java类

前段时间,我遇到了一段代码,它使用了一些标准的Java功能来定位实现给定接口的类.我知道函数隐藏在某些非逻辑位置,但它们可以用于其他类,因为包含的名称是隐含的.那时我不需要它,所以我忘了它,但现在我做了,我似乎无法再找到这些功能.这些功能在哪里可以找到?

编辑:我不是在寻找任何IDE函数或任何东西,而是可以在Java应用程序中执行的东西.

java interface

122
推荐指数
8
解决办法
17万
查看次数

如何在类路径中读取Java包中的所有类?

我需要读取Java包中包含的类.这些类在classpath中.我需要直接从Java程序执行此任务.你知道一个简单的方法吗?

List<Class> classes = readClassesFrom("my.package")
Run Code Online (Sandbox Code Playgroud)

java reflection

93
推荐指数
8
解决办法
11万
查看次数

具有多个类加载器的Java ServiceLoader

在具有多个ClassLoader的环境中使用ServiceLoader的最佳实践是什么?文档建议在初始化时创建并保存单个服务实例:

private static ServiceLoader<CodecSet> codecSetLoader = ServiceLoader.load(CodecSet.class);
Run Code Online (Sandbox Code Playgroud)

这将使用当前上下文类加载器初始化ServiceLoader.现在假设此片段包含在使用Web容器中的共享类加载器加载的类中,并且多个Web应用程序想要定义自己的服务实现.这些不会在上面的代码中被提取,甚至可能使用第一个webapps上下文类加载器初始化加载器并向其他用户提供错误的实现.

始终创建新的ServiceLoader似乎是浪费性能,因为它必须每次枚举和解析服务文件.编辑:这甚至可能是一个很大的性能问题,如关于java的XPath实现的答案所示.

其他库如何处理这个?他们是否为每个类加载器缓存实现,他们是否每次都重新分析它们的配置,还是只是忽略了这个问题而只适用于一个类加载器?

java classloader serviceloader

36
推荐指数
3
解决办法
2万
查看次数

查找实现特定接口的所有类

我正在开发一个应用程序(Quartz调度程序),我们有一个工作类负责实际执行工作,我们需要在Quartz调度程序中创建触发器时告诉/传递作业类的名称.

我想为所有想要使用API​​的人提供一个扩展点(除了我将作为API的一部分提供的一些通用作业).我们的想法是创建一个(标记)接口,如果有人想要将它们的类声明为调度程序作业类,那么他们所要做的就是(声明)实现接口.

我不确定如何找到遵循合同的类(通过实现接口),以便我可以向想要在调度程序中安排触发器的用户显示它们.

我的要求是不在运行时加载类,而是显示实现所需接口的类的用户列表,以便用户可以选择类和类名称可以传递给调度程序.这是Quartz调度程序,它最终将负责创建类的实例.

任何人都可以建议我如何实现上述目标,还是有任何其他更好的方法来实现我想要做的事情?

编辑

我浏览了ServiceLoader的文档,似乎为了实现一个服务,我必须在META-INF文件夹中创建一个具有实现类名称的文件,这使我认为如果我的API的用户想要20个不同的实现,他必须在文件中放入20个条目,这对我来说似乎为最终用户做了很多额外的工作,因为每个工作类将被创建用于执行特定的工作,并且可以有100个工作类.

如果我的假设错了,请纠正我.

java quartz-scheduler java-ee

34
推荐指数
2
解决办法
5万
查看次数

如何枚举包中的所有类并将它们添加到List?

我需要枚举包中的所有类并将它们添加到List中.单个类的非动态版本如下:

List allClasses = new ArrayList();
allClasses.add(String.class);
Run Code Online (Sandbox Code Playgroud)

如何动态地添加包中的所有类及其所有子包?


更新:在阅读了早期答案之后,我试图解决另一个次要问题是绝对正确的,所以让我说明一下.我知道这是可能的,因为其他工具可以做到这一点.在这里查看新问题.

更新:再次阅读本文,我可以看到它是如何被误读的.我想在编译后从文件系统中枚举所有MY PROJECT'S类.

java

31
推荐指数
2
解决办法
5万
查看次数

Delphi:在运行时查找从给定基类下降的类?

是否正在运行时,查找从特定基类下降的所有类?

例如,假装有一个类:

TLocalization = class(TObject)
...
public
   function GetLanguageName: string;
end;
Run Code Online (Sandbox Code Playgroud)

或者假装有一堂课:

TTestCase = class(TObject)
...
public
   procedure Run; virtual;
end;
Run Code Online (Sandbox Code Playgroud)

或者假装有一堂课:

TPlugIn = class(TObject)
...
public
   procedure Execute; virtual;
end;
Run Code Online (Sandbox Code Playgroud)

或者假装有一堂课:

TTheClassImInterestedIn = class(TObject)
...
public
   procedure Something;
end;
Run Code Online (Sandbox Code Playgroud)

在运行时,我想找到所有下降的类,TTestCase以便我可以使用它们.

是否可以查询RTTI以获取此类信息?

或者:德尔福有没有办法让每个班级走路?然后我可以简单地打电话:

RunClass: TClass;

if (RunClass is TTestCase) then
begin
   TTestCase(RunClass).Something;
end;
Run Code Online (Sandbox Code Playgroud)

也可以看看

delphi rtti delphi-5

8
推荐指数
2
解决办法
5518
查看次数

java列出父项的所有子类

可能重复:
在运行时,查找扩展基类的Java应用程序中的所有类

我需要获取扩展特定类(父类)的所有类(子)的列表,然后创建它们的所有实例.

我应该如何用Java做到这一点?

java reflection inheritance

4
推荐指数
1
解决办法
1万
查看次数

读取JAR文件的内容(在运行时)?

我看过帖子:

查看.jar​​文件的内容
以及
如何列出JAR文件中的文件?

但遗憾的是,我找不到一个好的解决方案来实际读取 JAR的内容(逐个文件).

此外,有人可以给我一个提示,或指向一个资源,我的问题在哪里讨论?

我只能想到一个不那么直接的方法来做到这一点:
我可以以某种方式将JAR资源列表转换为内部JAR URL列表,然后我可以使用openConnection()打开它.

java api jar

1
推荐指数
1
解决办法
1万
查看次数