【问题标题】:ClassNotFoundException Class.forName() at EnumClassNotFoundException Class.forName() 在枚举
【发布时间】:2019-10-14 14:28:01
【问题描述】:

我有一个枚举并尝试使用Class.forName(example)获得另一个类

但是,它显示 ClassNotFoundException。我的问题是,如何抛出异常来解决这个问题?

示例代码

enum Example {
  PLUS("Plus", new Class<?>[]{Class.forName("com.directory.File")})
}

【问题讨论】:

  • 你能包含一些演示问题的代码吗?
  • 你想抛出一个 ClassNotFoundException 来解决那个异常??您尚未描述问题,请编辑您的问题
  • 另见How to throw an exception from an enum constructor?。但最好的方法是在枚举器的初始化中不抛出异常。在命名空间“com.directory”中是否有一个名为“file”的类,以小写字母开头?
  • 谢谢@AndyThomas 我会检查它...
  • @TheCoder 好的;尽管如此,这种依赖关系仍然存在,只是在构建系统(甚至编译器)隐藏的形式中,这总是会导致代码有些扭曲。如果 maven 是您的构建系统,请考虑在示例依赖项中使用 optional 标志。

标签: java class enums


【解决方案1】:

您可以完全避免从枚举器中抛出异常。

enum Example {
  PLUS("Plus", new String[]{"com.directory.File"});
  ...
}

public class ExampleFactory {
  List<Class<?>> getClassesForExample( Example example ) throws ClassNotFoundException {
      // Build list of classes from class names in enumerator.
      ... 
  }
}

【讨论】:

    【解决方案2】:

    使用try-catch:

    try {
       Class<?> clazz = Class.forName(example);
       ...
    } catch (ClassNotFoundException ex) {
       ... 
    }
    

    【讨论】:

      【解决方案3】:

      你可以通过这种方式捕获异常:

      enum Example {   
              PLUS("Plus", Example("com.directory.file"));
      
              Example (String plus, Class<?>[] example) { }
      
              private static Class<?>[] Example (String className){
                  try {
                      return new Class<?>[]{Class.forName(className)};
                  } catch (ClassNotFoundException e) {
                      e.printStackTrace();
                  }
                  return null;
              }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-18
        • 1970-01-01
        • 2013-03-04
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        • 1970-01-01
        相关资源
        最近更新 更多