是否可以找到给定包中的所有类或接口?(快速查看例如Package,它似乎没有.)
我正在寻找一种方法来获取给定类路径目录中的所有资源名称列表,类似于方法List<String> getResourceNames (String directoryName).
例如,给定一个路径目录x/y/z包含文件a.html,b.html,c.html和子目录d,getResourceNames("x/y/z")应该返回一个List<String>包含下列字符串:['a.html', 'b.html', 'c.html', 'd'].
它应该适用于文件系统和jar中的资源.
我知道我可以用Files,JarFiles和URLs 写一个快速片段,但我不想重新发明轮子.我的问题是,鉴于现有的公共图书馆,实施最快捷的方式是getResourceNames什么?Spring和Apache Commons堆栈都是可行的.
我想做这样的事情:
List<Animal> animals = new ArrayList<Animal>();
for( Class c: list_of_all_classes_available_to_my_app() )
if (c is Animal)
animals.add( new c() );
Run Code Online (Sandbox Code Playgroud)
所以,我想查看我的应用程序的Universe中的所有类,当我找到一个来自Animal的类时,我想创建一个该类型的新对象并将其添加到列表中.这允许我添加功能而无需更新事物列表.我可以避免以下情况:
List<Animal> animals = new ArrayList<Animal>();
animals.add( new Dog() );
animals.add( new Cat() );
animals.add( new Donkey() );
...
Run Code Online (Sandbox Code Playgroud)
通过上面的方法,我可以简单地创建一个扩展Animal的新类,它将自动被拾取.
更新:2008年10月16日上午9:00太平洋标准时间:
这个问题引起了很多很好的回应 - 谢谢.从回答和我的研究中,我发现我真正想要做的就是在Java下不可能.有一些方法,比如ddimitrov的ServiceLoader机制可以工作 - 但它们对我想要的东西非常重,我相信我只是将问题从Java代码转移到外部配置文件.
另一种表达我想要的方式:我的Animal类中的静态函数查找并实例化从Animal继承的所有类 - 无需任何进一步的配置/编码.如果我必须配置,我也可以在Animal类中实例化它们.我理解,因为Java程序只是一个松散的.class文件联合体,就像它一样.
有趣的是,在C#中,这似乎相当微不足道.
我需要读取Java包中包含的类.这些类在classpath中.我需要直接从Java程序执行此任务.你知道一个简单的方法吗?
List<Class> classes = readClassesFrom("my.package")
Run Code Online (Sandbox Code Playgroud) 假设我的类是从压缩的.war文件加载或加载到其他地方的,我怎样才能发现给定包中的所有资源?枚举文件不会真正起作用,因为这是一个war文件.这很可能涉及使用当前的类加载器?
那里有一个图书馆吗?谷歌搜索显示只有一些黑客与列表文件.
我基本上想要使用JUnit的static suite()方法在IntelliJ IDEA项目中运行所有JUnit 单元测试(不包括JUnit集成测试).为什么要使用static suite()方法?因为我可以使用IntelliJ IDEA的JUnit测试运行器在我的应用程序中运行所有单元测试(并通过命名约定轻松排除所有集成测试).到目前为止,代码如下所示:
package com.acme;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class AllUnitTests extends TestCase {
public static Test suite() {
List classes = getUnitTestClasses();
return createTestSuite(classes);
}
private static List getUnitTestClasses() {
List classes = new ArrayList();
classes.add(CalculatorTest.class);
return classes;
}
private static TestSuite createTestSuite(List allClasses) {
TestSuite suite = new TestSuite("All Unit Tests");
for (Iterator i = allClasses.iterator(); i.hasNext();) {
suite.addTestSuite((Class<? extends TestCase>) i.next());
}
return suite; …Run Code Online (Sandbox Code Playgroud) 我想在com.example.resources包中读取一堆文本文件.我可以使用以下代码读取单个文件:
InputStream is = MyObject.class.getResourceAsStream("resources/file1.txt")
InputStreamReader sReader = new InputStreamReader(is);
BefferedReader bReader = new BufferedReader(sReader);
...
Run Code Online (Sandbox Code Playgroud)
有没有办法获取文件列表,然后将每个元素传递给getResourceAsStream?
编辑:在ramsinb建议我改变我的代码如下:
BufferedReader br = new BufferedReader(new InputStreamReader(MyObject.class.getResourceAsStream("resources")));
String fileName;
while((fileName = br.readLine()) != null){
// access fileName
}
Run Code Online (Sandbox Code Playgroud) 我需要一个包含在我的Java源代码包中的所有类文件的Class [].
我找不到一个标准的方法来一次性完成它.如果有人可以编写一个函数来获取该列表将非常有用.
Class[] myClasses = yourfunction(); // Return a list of class inside a source package in the currently working project in java
Run Code Online (Sandbox Code Playgroud) 我正在编写一个功能,将类放入程序的某个包中会很有帮助.另外,我只想要子类化某个类的类.
我需要这些类才能在它们上调用静态方法.
有自动方法吗?如果是这样,它会慢吗?
如果我不清楚,我想要的是这样的:
ArrayList<Class<? extends MySuperClass>> classes = ;
classes.add(MyClass.class);
classes.add(MyClass2.class);
Run Code Online (Sandbox Code Playgroud)
我不想为每个类调用add,而是自动获取该类列表.
类的数量很小,所以如果自动技巧很慢,我不介意手动声明它们 - 这个应用程序适用于移动平台.
无论哪种方式,我还想知道如何为ArrayList中的每个方法调用静态方法:
// error The method nameOfStaticMethod is undefined for the type Class<capture#2-of ? extends MySuperClass>
classes.get(0).nameOfStaticMethod ();
Run Code Online (Sandbox Code Playgroud)
感谢您的意见.
我有一个遵循标准目录布局的项目设置(虽然未使用Maven):
src/main
| java
| resources
| library.dll
Run Code Online (Sandbox Code Playgroud)
本机DLL位于resources文件夹中,源位于java文件夹中。resources文件夹是Java类路径的成员。
我现在想加载DLL,而不必设置JRE -Djava.library.path选项或设置PATH变量,以便可以通过简单的双击来启动生成的jar文件。
运行jar文件时是否可以将资源文件夹添加到库搜索路径而无需进行其他配置?例如,设置与Class-Path清单中的相似?
File在其构造函数中使用String和URI.
getClass().getResource(...)返回URL并
getResourceAsStream(...)返回InputStream.有没有办法从资源构建文件?
java ×11
reflection ×4
class ×2
resources ×2
classpath ×1
file-io ×1
inheritance ×1
io ×1
junit ×1
list ×1
package ×1
packages ×1
unit-testing ×1
war ×1