java - 有一个不使用实例变量的非静态方法有意义吗?

标签 java methods static instance non-static

编译器不允许静态方法调用非静态方法。我理解它这样做是因为非静态方法通常最终使用实例变量。

但是有一个不使用实例变量的非静态方法有意义吗?如果我们有一个不影响或不受实例状态影响的行为,那么这种方法不应该被标记为静态的。

最佳答案

当然!假设您在 interface IMyCollection 中有。它有一个方法 boolean isMutable().

现在您有两个类,class MyMutableListclass MyImmutableList,它们都实现了 IMyCollection。它们中的每一个都将覆盖实例方法isMutable()MyMutableList 只返回trueMyImmutableList 返回.

isMutable() 在两个类中都是一个实例方法,(1) 不使用实例变量,(2) 不影响实例状态。然而,由于语言的限制(不可能覆盖静态方法),这种设计是唯一实用的设计。

另外,我想澄清一个误解(正如@manouti 所做的那样):非静态方法不是实例,因为它们使用任何实例变量或影响实例状态;它们是实例方法,因为它们是这样定义的(没有 static 关键字),因此具有隐式 this 参数(在 Python 等语言中,实际上是显式的!)。

关于java - 有一个不使用实例变量的非静态方法有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31814233/

相关文章:

java - DriverManager.getConnection() 上的编译错误 "Cannot find symbol"

Java如何验证2个输入是否为 float

java - 在不指定类类型参数的情况下强制类字段为相同的泛型类型

c# - 仅传递接受的参数值的方法

Java对象和方法参数

c - 如何在 C 中声明常量字符串以及它们有什么用?

C++ std::list 作为静态成员变量——并发问题?

java - 服务器处理成功后 Flash 上传 IOError #2038

ruby-on-rails - Ruby on Rails 显示 Action 在 Controller 中不起作用

带有 static 关键字的 JavaFX 问题;带有最小的、完整的和可验证的示例