public static List<Class> getAllClassByInterface(Class c){
List<Class> returnClassList = new ArrayList<Class>(); //
if(c.isInterface()){
String packageName = c.getPackage().getName(); //
try {
List<Class> allClass = getClasses(packageName); //
//
for(int i=0;i<allClass.size();i++){
if(c.isAssignableFrom(allClass.get(i))){ //
if(!c.equals(allClass.get(i))){ //
returnClassList.add(allClass.get(i));
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return returnClassList;
}
private static List<Class> getClasses(String packageName)
throws ClassNotFoundException, IOException {
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
ArrayList<Class> classes = new ArrayList<Class>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes;
}
private static List<Class> findClasses(File directory, String packageName)
throws ClassNotFoundException {
List<Class> classes = new ArrayList<Class>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
assert !file.getName().contains(".");
classes.addAll(findClasses(file, packageName + "." +
file.getName()));
} else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName+ '.' +
file.getName().substring(0, file.getName().length() - 6)));
}
}
return classes;
}
分享到:
相关推荐
在Java中,一个类可以实现多个接口,这使得设计更加灵活。接口还常用于实现事件处理和回调机制。 2. 类(Class): 类是面向对象编程的基础,它是创建对象的模板。在Java中,类定义了对象的状态(属性,即成员变量...
Java中的接口是一个完全抽象的类,它只能包含常量(静态final)和抽象方法(没有方法体的方法)。接口不能包含实例变量,也不能有构造函数。通过定义接口,我们可以创建一个规范,规定哪些类必须实现特定的方法。 ...
- **接口**:一个类可以实现多个接口。 这种差异意味着接口更适合用于定义对象间的行为规范,而抽象类则适合定义一组紧密相关的类的共同属性和行为的基础框架。 ##### 成员变量与默认实现 - **抽象类**:可以拥有...
要求:①定义一个接口,其中包含一个计算面积的抽象方法和一个计算周长的抽象方法;②输入数据为圆的半径、三角形的三条边长、矩形的长和宽,对于用户的输入要有友好提示;③程序能够排除输入过程中的非法数据(如:...
实现类也可以继承具体类或者抽象类,并且可以同时实现多个借口。 继承和实现 继承是指子类继承父类的所有成员变量和方法。实现是指类实现接口中的所有方法。 内部类 内部类是指在外部类中声明的类。内部类可以...
在C#中,我们需要构建一个HttpRequestMessage对象,设置其Uri属性为Java接口的URL,HttpMethod属性为"POST",然后在RequestContent中添加要上传的数据。例如,如果接口接受JSON格式的数据,我们可以使用Json.NET库将...
接口允许类之间进行多继承,即一个类可以实现多个接口,而Java只支持单继承(一个类只能继承一个父类)。接口提供了规范,定义了一组必须被实现的方法,使得实现接口的类具有统一的行为。例如,我们可以创建一个名为...
在“实验2 Java继承与接口”中,我们将深入探讨这两个概念,并通过实现一个简易计算器来实践它们。 首先,接口(Interface)在Java中是一种完全抽象的类型,它只包含方法的签名,没有具体实现。接口可以看作是一种...
在Java数据库应用框架方面,Java作为一种流行的编程语言,拥有丰富的数据库连接和支持库,如JDBC(Java Database Connectivity),它是Java访问数据库的标准API。通过JDBC,开发者可以编写数据库独立的代码,实现对...
构造注入是指在接受注入的类中定义一个构造方法,并在参数中定义需要注入的类。 (1)为了让类Business接受XMLData的注入,需要为它定义一个构造方法,来接受XMLData的注入。Business.java的示例代码如下: //******...
那么在类中对一个借口来定义,从本质上讲,跟在抽象类中定义一个接口一样,也体现着它的抽象性,即它是可以变化的。 定义接口的目的是让代码有更强的可扩展性。那么为何要定义接口?以及接口有何意义呢?关于接口...
其次,继承是面向对象编程的重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。这样做的好处在于代码重用和分类,子类可以继承父类的公共属性和方法,同时可以添加自己的特性。在Java中,一个类只能...
然而,这个实现有一个问题,即所有图形的方法都集中在 `figure` 类中,这违背了面向对象设计的原则。正确的方式应该是为每个图形类型创建独立的类(Circle、Rectangle 和 Triangle),并在各自的类中定义计算周长和...
在Java中,由于类的单继承特性,一个类无法同时继承两个或更多的类。然而,有时我们需要一个类能够同时具备多个类的特性。例如,一个防盗门需要具备门的基本功能(如开关),同时还要有锁的功能(如上锁和解锁)。在...
《java完美编程(第3版)》侧重于面向对象设计,通过浅显易懂的语言和代码,很好地平衡了完整实例和解释性讨论,并围绕着java语言的特征全面、透彻地介绍诸多编程技术。书中全面介绍java语言已经实现的封装、继承和...
【达内学习笔记全套】是一份综合性的IT学习资源,主要涵盖了Java开发相关的多个重要领域。这份笔记由EagleKing创作,并在heimeiyingwang的指导下完成,旨在为初学者和有一定经验的开发者提供深入浅出的技术讲解。...
接口(是一种特殊的类,类似于类,有具体的属性,但是方法是抽象的方法) 定义: 关键字:interface(类是class) 常量(类似于类的属性,但是1.常量必须给定初始值,且不能修改(final);2.两个关键字ststic、...
2. 面向对象:面向对象的思想和 C++ 的面向对象思想几乎都一样,只不过 java 在继承方面有所不同,java 采用借口来实现多继承,这是与 C++ 的很大不同之处。 3. 常用的 API:常用的 API 也差不多。无论是哪一种语言...
C#是一种现代的、面向对象的编程语言,被广泛用于Windows平台的开发。大漠插件的C#版本让C#开发者能够利用其强大的网络抓取和分析能力,为.NET Framework应用程序添加网络数据处理功能。 **大漠接口说明.CHM** CHM...