我有一个返回String的静态方法,但是如果传入的字符串与几个单词中的一个不匹配,我想抛出异常.下面的代码只是我想要做的一个示例,但我一直得到"非静态变量,这不能从静态上下文引用"消息,我抛出异常的行.基本上,getMsg的返回值必须是有效的,否则程序无法继续,所以我需要一种方法来捕获它.
public static String getMsg(String input) throws UnknownInputException{
if (input.equals("A")){
return "key for A";
}
throw new UnknownInputException("Some Message");
return "unknownInput";
Run Code Online (Sandbox Code Playgroud)
问题是由这个事实造成的,那UnknownInputException可能是一个嵌套类,如果你用new运算符实例化它,作为一个嵌套类,它应该可以访问一个"父"对象 - 这个对象实例化后就不存在了在静态环境中.有关此内容的更多信息,请参阅返回内部类的静态方法.
一种可能的解决办法是宣布UnknownInputException为static这样的:
private static class UnknownInputException extends Exception { ... }
Run Code Online (Sandbox Code Playgroud)
当然,您将无法访问此类中的任何实例(非静态)方法和/或字段,但在您的情况下这可能不是问题(特别是在Exception类的情况下).
此外,行return之后的值throw是不必要的,因为执行永远不会到达该行.