测试该接口的类/接口实现?

我想测试该接口的类/接口实现。

所以我有一个基本的接口Adapter和它的一些接口的基础(如PermissionsAdapter )。 现在我得到类型为可变Adapter ,现在我想根据得到的每个接口Adapter ,这个变量正在实施。

一个简单的实现:

import java.util.LinkedList; import java.util.List; public class Main { private interface A { } private interface BA extends A { } private interface CA extends A { } private interface X {} private class IB implements BA { } private class IC implements CA { } private class IBC implements BA, CA { } private class ICX implements CA, X { } private class IBCX implements BA, CA, X {} public Main() { this.test(new IB()); this.test(new IC()); this.test(new IBC()); this.test(new ICX()); this.test(new IBCX()); } private void test(A a) { List<Class<? extends A>> result = this.getAdapterInterfaces(a); System.out.print(a.getClass().getSimpleName() + "{"); for (Class<? extends A> class1 : result) { System.out.print(class1.getSimpleName() + ", "); } System.out.println("}"); } @SuppressWarnings("unchecked") public List<Class<? extends A>> getAdapterInterfaces(A adapter) { List<Class<? extends A>> result = new LinkedList<Class<? extends A>>(); Class<?>[] interfaces = adapter.getClass().getInterfaces(); for (Class<?> clazz : interfaces) { if (A.class.isInstance(clazz)) { result.add((Class<? extends A>) clazz); } } return result; } public static void main(String[] args) { new Main(); } }

下面是Adapter接口APermissionsAdapter例如BACA是另一个适配器。 X只是一个示例接口,该列表不应包含。

而结果:

IB{} IC{} IBC{} ICX{} IBCX{}

因此,它似乎并没有工作。 现在哪里是我的错误中getAdapterInterfaces(A) 我认为这是考验,但我怎么能测试,如果一个类是特定类的A

法比安

--------------解决方案-------------

您的测试A.class.isInstance(clazz)是错误的。 它测试接口的类的对象是否是你的A类型,它不是(这是类型的ClassObjectSerializableAnnotatedElementGenericDeclarationType (1.6),仅此而已)。

你想Class.isAssignableFrom ,我想。 (但是,阅读文档。)

此外,您可能需要改乘超类和接口,因为有可能是间接的实现。

分类:java的 时间:2012-01-01 人气:0
本文关键词: java的
分享到:

相关文章

  • 杀死在Java中的目录中的所有进程(Windows)中 2012-01-01

    有没有一种方法,我可以通过Java停在某个目录的所有进程? 我需要我的java程序停止我的C在目录中的"X"的所有进程:\驱动器. --------------解决方案------------- 可以从Java控制台命令启动,例如 Process p = Runtime.exec("taskkill /IM notepad.exe"); int exitValue = p.waitFor(); 有来自Sysinternals的工具套件. 您可以查询进程并采取行动,它

  • 是否线程问题的C / C ++“系统级的程序员”显著不同,所面临的Java程序员? 2012-01-01

    我在寻找一个发展工作,看到很多上市规定,开发商必须在多线程来熟悉. 这似乎为Java工作列表,以及C ++的房源涉及"系统编程"在UNIX上. 在过去的几年里,我一直在与Java和使用它的各种同步机制. 在90年代末我做了很多C ++的工作,虽然很少线程. 在大学里,但是,我们在使用Solaris线程. 我的问题是,是否有开发商在C / C ++的脸相比,开发人员在Java中,这些问题显著的差异,以及是否有任何的技术来解决这些问题有根本的区别. Java的显然包括一些更好的机制和收藏同

  • 关于Java格式化日期 2012-01-01

    我有一个具有以下格式的字符串:janu​​ary_2005(MMMMMMM_yyyy) 我想将其转换为一个MySQL接受的日期值插入它在数据库上. 我需要做它的Java. 有谁知道怎么办呢? 谢谢 --------------解决方案------------- 这样的事可能会做的伎俩, SimpleDateFormat myFormat = new SimpleDateFormat("MMMM_yyyy"); Date aDate; try { aDate = myFormat.par

  • Java的布尔实施的valueOf的() 2012-01-01

    虽然周围的JDK 1.7源戳我注意到Boolean.java这些方法: public static Boolean valueOf(String s) { return toBoolean(s) ? TRUE : FALSE; } private static boolean toBoolean(String name) { return ((name != null) && name.equalsIgnoreCase("true")); } 所以valueOf()在内

  • java.lang.OutOfMemoryError:在Tomcat中使用Eclipse的PermGen空间 2012-01-01

    使用eclipse Tomcat上运行我的应用程序时,经常我得到这个异​​常: java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.jav

  • 是否有可能从Java小程序发送一个文件,而MySQL来PHP? 2012-01-01

    是否有可能发送图片或文件从Java小程序到产生PDF格式的PHP脚本. 到现在为止我的Java小程序具有您可以保存小程序的截图中的用户选择的目录,用户可以保存测试结果在PDF形式的机会. 但我想t将其合并到一个文件,我想避免与数据库工作. --------------解决方案------------- 是的,它甚至不会意义用于此一数据库(除非这是测试结果的来源). 只要上传截图/结果为一个POST请求,然后用PHP生成PDF. 所以,你想要的是渲染PDF结合两者,图像和测试结果吧? 处理框架有一

  • 我怎样才能确定一个不同的进程ID使用Java或JRuby的在Linux上运行? 2012-01-01

    我需要看到一个给定的进程ID运行,它必须工作在Java或JRuby的(最好是一个Ruby的解决方案). 它可以是取决于系统的Linux操作系统(特别是Debian和/或Ubuntu). 我已经有我要找的PID,只需要看看它是否正在运行. 更新: 感谢所有的答复大家! 我很感激​​,但是这不是我要找的......我在一个标准的Ruby库希望的东西完全是(或Java,但最好红宝石)......如果没有这样的库调用的存在,我可能会坚持使用procfs的解决方案,我已经有了. -------------

  • 春天的形式 - 的ModelAttribute名称如Java不变 2012-01-01

    为了不重复自己在代码中我使用modelAttribute名称如Java不变 @Controller @RequestMapping("/") public class Controller { public static final String MODEL_ATTRIBUTE = "myModel"; public String renderPage(Model model) { model.addAttribute(MODEL_ATTRIBUTE, ...);

  • 我能逃脱在Java的MessageFormat括号? 2012-01-01

    我想输出在Java的MessageFormat一些支撑. 例如我知道下面不工作: MessageFormat.format(" public {0} get{1}() {return {2};}\n\n", type, upperCamel, lowerCamel); 是否有逃避周围的"回{2}"大括号的一种方式? --------------解决方案------------- 你可以把它们放在里面的单引号如 '{'return {2};'}' 在这里看到更多的细节

  • JProfiler的5.2.4 + IBM WAS 7 64位的,Java 1.6的 2012-01-01

    我想配置的JProfiler,并收到以下错误上推出的WAS native_stderr.log文件. 我下载了64位的JProfiler 5×版本. 该向导配置是干净的. 不知道这是为64位的问题,或者JProfiler的. 谢谢! JVMJ9TI001E代理库jprofilerti无法打开(jprofilerti.dll不是有效的Win32应用程序.)JVMJ9VM015W初始化错误图书馆j9jvmti24(-3):JVMJ9VM009E J9VMDllMain失败无法创建Java虚拟机. -

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.317 (s). 10 q(s)