【问题标题】:How can I determine whether a Java class is abstract by reflection如何通过反射确定 Java 类是否是抽象的
【发布时间】:2010-11-07 13:22:27
【问题描述】:

我正在通过 Jar 文件中的类进行交互,并希望找到那些非抽象的。我可以通过实例化类并捕获 InstantiationException 来解决这个问题,但这会影响性能,因为某些类的启动很繁重。我在 Class.java 文档中找不到明显像 isAbstract() 的东西。

【问题讨论】:

    标签: java class abstract


    【解决方案1】:

    当您在类对象上调用 getModifiers() 时,它会将 abstract 作为其修饰符之一。

    这个link 应该会有所帮助。

     Modifier.isAbstract( someClass.getModifiers() );
    

    还有:

    http://java.sun.com/javase/6/docs/api/java/lang/reflect/Modifier.html

    http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getModifiers()

    【讨论】:

    • 谢谢!一个小提示:你不能使用“类”作为变量名,也许你想改变你的例子。
    • @seth 我认为应该是Modifier.isAbstract( someClass.class.getModifiers() ); 也许你想改变它
    • 根据正常的 Java 命名约定,它是 someClass.getModifiers()SomeClass.class.getModifiers() 其中Class<SomeClass> someClass = SomeClass.class;
    【解决方案2】:
    Class myClass = myJar.load("classname");
    bool test = Modifier.isAbstract(myClass.getModifiers());
    

    【讨论】:

      【解决方案3】:
      public static boolean isInstantiable(Class<?> clz) {
          if(clz.isPrimitive() || Modifier.isAbstract( clz.getModifiers()) ||clz.isInterface()  || clz.isArray() || String.class.getName().equals(clz.getName()) || Integer.class.getName().equals(clz.getName())){
              return false;
          }
          return true;
      }
      

      【讨论】:

      • 如果它是一个接口并且类名是 java.util.List 你可能会创建 ArrayList
      猜你喜欢
      • 1970-01-01
      • 2010-12-18
      • 2023-03-18
      • 2017-10-27
      • 1970-01-01
      • 2020-10-02
      • 2018-02-26
      • 1970-01-01
      • 2015-08-08
      相关资源
      最近更新 更多