我希望使用此方法返回Course对象,但前提是该对象不为null。
public Course getClass1()
{
if(class1 != null)
{
return class1;
}
}
我有一个'缺少返回语句'错误,因为它可能不会返回任何内容,但如果对象为null,我不想返回任何内容,甚至不返回空字符串。我可以将方法更改为无效
public void getClass1()
{
if(class1 != null)
{
System.out.println(class1);
}
}
但如果我这样做,我就无法调用toString中的方法
public String toString()
{
return super.getName() + "\t" + super.getAge() + "\t" + getStudentNumber() +
"\n" + getClass1() + "\n" + getClass2() + "\n" + getClass3();
}
因为不允许使用void类型。
答案 0 :(得分:7)
您不能有两种不同的返回类型,您的方法必须返回特定类型或不返回任何内容(void
)。
这里唯一可行的解决方案是让它返回Course
,如果没有可用课程,则返回null
。
public Course getClass1() {
return class1;
}
public String toString() {
Course class1 = getClass1();
boolean class1Available = class1 != null;
if (class1Available) {
// something
else {
// something else
}
}
答案 1 :(得分:2)
您将不得不返回Java语言所需的内容。你有几个选择:
返回一个空白的课程对象:
public Course getClass1() {
if(class1 != null) {
return class1;
}
return new Course();
}
null
。
退出并抛出异常:
public Course getClass1() {
if(class1 == null) {
throw new NullPointerException("class1 is null");
}
return class1;
}
throws
子句。答案 2 :(得分:2)
如果存在空值,则应该在getClass1
中返回null。
如果你不想在toString()
中有空值,你可以简单地使用三个参数运算符:
public Course getClass1() {
return class1;
}
public String toString() {
return super.getName() + "\t" + super.getAge() + "\t" + getStudentNumber() +
(getClass1()==null?"":("\n" + getClass1())) + "\n" + getClass2() + "\n" + getClass3();
}
它的工作原理如下:
(condition ? value_if_true : value_if_false)
答案 3 :(得分:2)
无法完成。如果声明您的方法返回ClassX
,则必须返回该类的实例,其子类之一或null
。方法客户端(调用者)应该根据返回的值(或null)执行不同的逻辑。
答案 4 :(得分:1)
这里的问题是它应该在类1中返回的是null吗?任何默认/虚拟对象或Simply null。如果它没有返回默认值或虚拟对象,只需删除这个条件,因为它没用。
答案 5 :(得分:1)
除非:
,否则没有正常的方法可以从方法中“不返回任何内容”void
返回类型。这不适用于您的情况,除非您使用实例变量(例如this.class1
)并修改该变量getClass1()
方法(返回void
),但这不是一个好的编程习惯,如果您遵循它,至少将getClass1()
重命名为update()
Exception
。这在这里没有多大意义,因为toString()
不应该抛出异常。如果主要关注getClass1()
,您可以轻松修改toString()
方法,如下所示:
public String toString()
{
Course c = getClass1();
return super.getName() + "\t" + super.getAge() + "\t" + getStudentNumber() +
"\n" + (c==null?"":c) + "\n" + getClass2() + "\n" + getClass3();
}
要将此行为推广到具有Object
返回类型的任何方法,您可以使用简单方法print()
,例如
public String print(Object o)
{
return (o==null?"":o.toString());
}
然后在print()中包装所有可能返回null值的方法,例如
public String toString()
{
return super.getName() + "\t" + super.getAge() + "\t" + getStudentNumber() +
"\n" + print(getClass1()) + "\n" + print(getClass2()) + "\n" + print(getClass3());
}