我已经读过可以创建一个构造函数来检查输入是否正确,我尝试使用IllegalArgumentException。我的代码工作正常,只要我不创建一个对象,输入是否正确无关紧要,编译器会给出错误。这是我的代码:
public class Knoten{
private String typ;
public Knoten(String typ) throws Exception{
try{
if (typ.equals ("BASE")||typ.equals ("WORD")||typ.equals ("ROOT")||typ.equals ("AFFIX")){
this.typ=typ;
}}catch(IllegalArgumentException ex){
System.out.println ("invalid typ");
}}
public String getTyp(){
return typ;
}
public String toString(){
return "typ: "+getTyp();
}
public static void main (String args[]){
Knoten Knot1= new Knoten("haha");//throws error
Knoten Knot2= new Knoten("BASE");//throws error
}}
我也尝试过这样做,得到相同的结果:
public class Knoten{
private String typ;
public Knoten(String typ) throws Exception{
if (typ.equals ("BASE")||typ.equals ("WORD")||typ.equals ("ROOT")||typ.equals ("AFFIX")){
this.type=type;
}else{
throw new IllegalArgumentException("invalid type");
}
}
public String getTyp(){
return typ;
}
public String toString(){
return "typ: "+getTyp();
}
public static void main (String args[]){
Knoten Knot1= new Knoten("haha");//throws error
Knoten Knot2= new Knoten("BASE");//throws error
}
}
所以我的问题是,如果我每次创建该类的对象时都必须处理异常,或者是否有更好的方法来执行此操作。
答案 0 :(得分:1)
我相信您收到编译错误,例如:ImageView
,当您从Unhandled exception type Exception
投掷Checked Exception
(java.lang.Exception
)时,您就会收到此错误。不要在抛出中放置任何异常或尝试抛出未经检查的异常,如:
constructor
或围绕它构造函数public Knoten(String type) throws IllegalArgumentException { // throws unchecked exception is optional
if (type.equals("BASE") || type.equals("WORD") || type.equals("ROOT") || type.equals("AFFIX")) {
this.type = type;
} else {
throw new IllegalArgumentException("invalid type");
}
}
。
try catch/finally
答案 1 :(得分:0)
您需要在实例化新对象时捕获异常,在这种情况下,您的第二个解决方案没问题,除了您要执行的主要操作:
try {
Knoten Knot1 = new Knoten("haha");
} catch (Exception e) {
e.printStackTrace();
}
另外,我真的会考虑使用public static void main (String args[]){
try {
Knoten Knot1= new Knoten("haha"); // This will throw error
Knoten Knot2= new Knoten("BASE");
}
catch (IllegalArgumentException e) {
// deal with exception here
}
}
作为您的解决方案,然后在创建新对象时不需要验证您的类型。例如,您可以像enums
这样:
enum
然后你的构造函数看起来像:
public enum KnotenType {
BASE,
WORD,
ROOT,
AFFIX,
}
有关枚举的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
答案 2 :(得分:0)
您的代码中存在拼写错误。使用
this.typ = typ; // instead of this.type = type;
并且还记得捕获构造函数抛出的异常