Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;多尔",;类与静态实用程序方法_Java_Oop - Fatal编程技术网

Java &引用;多尔",;类与静态实用程序方法

Java &引用;多尔",;类与静态实用程序方法,java,oop,Java,Oop,假设您有一个带有read方法的FileReader类 我理解类级属性可以证明拥有一个实例是合理的。但是,通过将这些相同的属性拉入相应的静态读取方法的范围内,停止生成等效的ReaderUtils类是什么 简言之,对于静态实用程序方法,“Doer”类究竟有何正当理由?接口不能静态实现-接口的实现方法必须是实例方法。因此,这禁止将“实用程序类”作为运行时实现来执行某些服务,或将其作为运行时实现进行查找-它必须是类的实例。这是“doer”类存在的主要原因之一 如果实现在编译时已知,那么实用程序类就可以了

假设您有一个带有
read
方法的
FileReader

我理解类级属性可以证明拥有一个实例是合理的。但是,通过将这些相同的属性拉入相应的
静态
读取
方法的范围内,停止生成等效的
ReaderUtils
类是什么


简言之,对于静态实用程序方法,“Doer”类究竟有何正当理由?

接口不能静态实现-接口的实现方法必须是实例方法。因此,这禁止将“实用程序类”作为运行时实现来执行某些服务,或将其作为运行时实现进行查找-它必须是类的实例。这是“doer”类存在的主要原因之一


如果实现在编译时已知,那么实用程序类就可以了,而作为静态方法,它们更可能是自然无状态的(只需确保任何静态字段都是不可变/无状态的),这是并发服务请求的典型服务器所需的。

这是首选项。一般来说,Java偏爱名词(因为人们觉得这更像是面向对象的),因此FileReader


正如Jeffrey所指出的,有时名词困扰会导致不必要的冗长,此时调用会被包装在静态方法中。

OOP的本质是封装状态/数据以及相关的行为。静态实用程序方法类似于过程语言中的全局函数——您将行为(静态方法)与状态(此方法的参数)分离,从而破坏封装

这在实践中意味着什么?您必须调用
ReaderUtils.read()
,而不是调用
ReaderUtils.read(file)
,这意味着您现在与实现紧密耦合——您已经做了一个隐式假设,即您将始终使用
ReaderUtils
,并始终传入一个文件


如果您改为使用通用
阅读器
界面,您今天可以使用
文件阅读器
,但明天可以将其换成
数据库阅读器
HttpReader
,而无需更改任何其他代码——所有
阅读器。read()
调用将继续工作。

没有什么能阻止任何人制作等效的
ReaderUtils
,事实上,它是在JRE中实现的:。不是100%相关,但这提醒我人们是多么喜欢Java中的工厂。。。