类型中的方法不适用于参数(Class <main>)?

时间:2017-10-01 02:18:14

标签: java class exception printing error-handling

我想要做的是打印一个自定义错误消息,打印出错误导致的类和函数。要获取类,我使用getClass()。但是,当我尝试运行我的项目时,我收到以下错误消息:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The method printException(Exception) in the type ExceptionPrinter is not applicable for the arguments (FileNotFoundException, Class<Main>, String, String)
    The method printException(Exception) in the type ExceptionPrinter is not applicable for the arguments (ParseException, Class<Main>, String, String)

    at Main.main(Main.java)

我不知道为什么我不能使用Class.class传递给函数。我之前的B / C:

ExceptionHandler.printException(e, getClass() + " main() could not find input file");

其中 ExceptionPrinter.java printException()看起来像这样:

public static void printException(Exception e, String message){
    System.err.println(message);
    printException(e);
}

这很好。

如果有人可以帮助我,那么我可以将类名传递给我的 ExceptionPrinter.java ,这将是非常棒的!

代码

Main.java

public class Main {

    public static void main(String[] args) {

        try {
            ...

        } catch (FileNotFoundException e) {
            ExceptionPrinter.printException(e, Main.class, "main", "Input file not found");
        } catch (ParseException e) {
            ExceptionPrinter.printException(e, Main.class, "main", "Exception occurred during parsing");
        }
    }

}

ExceptionPrinter.java

public class ExceptionPrinter {

    public static void printException(Exception e){
        System.err.println("Error message: " + e.getMessage());
        e.printStackTrace();
    }

    public static void printException(Exception e, Class class, String function, String message){
        System.err.println(class + " " + function + "(): " + message);
        printException(e);
    }

}

3 个答案:

答案 0 :(得分:1)

<强> Main.java

public class Main {
    public static void main(String[] args) {
        try {
            int a=2/0;
        } catch (ArithmeticException e) {
            ExceptionPrinter.printException(e, Main.class, "main", "Input file not found");
        } catch (NullPointerException e) {
            ExceptionPrinter.printException(e, Main.class, "main", "Exception occurred during parsing");
        }
    }

}

<强> ExceptionPrinter.java

  

在java类中是一个关键字,所以你不能像变量一样声明,   即将班级更改为班级c 或任何

public class ExceptionPrinter {

    public static void printException(Exception e){
        System.err.println("Error message: " + e.getMessage());
        e.printStackTrace();
    }

    public static void printException(Exception e, Class c, String function, String message){
        //System.err.println(class + " " + function + "(): " + message);
        printException(e);
    }
}

答案 1 :(得分:0)

看起来您的ExceptionPrinter不是您正在使用的最新编译版本,可能它的类只有public static void printException(Exception e)方法而不是另一个。首先编译。如果您使用构建工具来编译所有相关代码,那么默认情况下您就不会看到这个。

异常The method printException(Exception) in the type ExceptionPrinter is not applicable for the arguments (FileNotFoundException, Class<Main>, String, String)建议找不到其他重载方法

答案 2 :(得分:0)

将重载的方法签名更改为:

public static void printException(
    final Exception execption, 
    final Class clazz, 
    final String function, 
    final String message)
  • class是Java中的保留字,不能用作参数名称。
  • 添加final,因为这是一个很好的做法。