在java中,我希望返回必须捕获的值的方法调用不会抛出编译错误。为什么?

在java中,我希望返回必须捕获的值的方法调用不会抛出编译错误。为什么?,java,compiler-errors,Java,Compiler Errors,在Java中,如果一个方法定义返回某个内容,调用该方法的类必须准备将该方法的返回值捕获到一个变量中。至少我从逻辑上理解是这样的。但我有一个奇怪的情况,编译器没有抱怨 我有一个定义了方法的动物界面。一个实现Animal接口的AnimalImpl类,以及一个将组合用于Animal类型实例变量的Lion类 这是密码。为什么编译器不会发狂 接口: 实施: 客户: 编译器怎么能不抛出错误呢?为什么会出现这种情况?您不必在变量中存储返回值。返回的结果并不意味着您必须保留它。您不必在变量中存储返回值。返回的值

在Java中,如果一个方法定义返回某个内容,调用该方法的类必须准备将该方法的返回值捕获到一个变量中。至少我从逻辑上理解是这样的。但我有一个奇怪的情况,编译器没有抱怨

我有一个定义了方法的动物界面。一个实现Animal接口的AnimalImpl类,以及一个将组合用于Animal类型实例变量的Lion类

这是密码。为什么编译器不会发狂

接口:

实施:

客户:


编译器怎么能不抛出错误呢?为什么会出现这种情况?

您不必在变量中存储返回值。返回的结果并不意味着您必须保留它。

您不必在变量中存储返回值。返回的值并不意味着您必须保留它。

使用方法返回的值不是语言要求

这种情况经常发生,例如:

Set<Integer> set = new HashSet<Integer>();
set.add(1); // returned boolean ignored
Set Set=newhashset();
集合。添加(1);//返回的布尔值被忽略

返回一个布尔值,指示是否由于使用给定参数调用该集而更改了该集(如果该集已包含该值,则返回false),但大多数情况下,返回的值都会像在代码段中一样被忽略。

使用方法返回的值不是语言要求

这种情况经常发生,例如:

Set<Integer> set = new HashSet<Integer>();
set.add(1); // returned boolean ignored
Set Set=newhashset();
集合。添加(1);//返回的布尔值被忽略

返回一个布尔值,指示是否由于使用给定参数调用该集而更改了该集(如果该集已包含该值,则返回false),但大多数情况下,返回的值都会被忽略,就像在代码段中一样。

编译器不会出错,因为您编写的所有内容都是合法的java


您没有在问题中明确指出编译器应该在哪里出错。在不了解更多信息的情况下,我可以假设您认为,仅仅因为一个方法具有返回类型,该方法的调用方就必须将其分配给某个对象。Java根本不强制执行这一点——一个类的客户端可能会调用一个方法,并在法律上完全忽略其返回值。

编译器不会出错,因为您编写的所有内容都是合法的Java


您没有在问题中明确指出编译器应该在哪里出错。在不了解更多信息的情况下,我可以假设您认为,仅仅因为一个方法具有返回类型,该方法的调用方就必须将其分配给某个对象。Java根本没有强制执行这一点——一个类的客户端可能会调用一个方法,并在法律上完全忽略它的返回值。

我必须说,我从未见过有人因为没有出错而如此心烦意乱

首先,Java不会强制您捕获从方法返回的值

其次,并非所有Java方法都返回值。有些是
void

碰巧您经常需要捕获返回值来做其他事情,但您不必这样做


别担心。如果你和我一样,你的编译器和运行时日志很快就会崩溃。尽情享受吧。

我必须说,我从未见过有人因为没有犯错而如此心烦意乱

首先,Java不会强制您捕获从方法返回的值

其次,并非所有Java方法都返回值。有些是
void

碰巧您经常需要捕获返回值来做其他事情,但您不必这样做


别担心。如果你和我一样,你的编译器和运行时日志很快就会崩溃。尽情享受吧。

编译错误不是抛出的,而是打印出来的。在Java(和C一样)中,忽略方法调用的返回参数是完全合法的。编译错误不是抛出的,而是打印出来的。在Java(和C一样)中,忽略方法调用的返回参数是完全合法的。感谢我对整个编译语言世界都是新手。我有脚本语言背景。谢谢你的帮助。请注意,尽管有人可能会争论其优点,但不从Python或Ruby函数获取结果也是合法的。与Java的不同之处在于,它们的函数总是返回一些东西(Python中没有,Ruby中没有)。我有脚本语言背景。谢谢你的帮助。请注意,尽管有人可能会争论其优点,但不从Python或Ruby函数获取结果也是合法的。与Java的不同之处在于,它们的函数总是返回一些东西(Python中没有,Ruby中没有)。
public class Lion {
    private Animal ani;
    public String executeAnimalMethod(){
        ani = new AnimalImpl();
        ani.eat("carrots");
        ani.walk(100);
        ani.fly(100);
        return null;
    }
}
Set<Integer> set = new HashSet<Integer>();
set.add(1); // returned boolean ignored