Java 中静态方法的本意是什么呢?就是为了可以不实例化地使用这个方法?

2018-06-08 21:07:21 +08:00
 Newyorkcity
一个工具类中的方法一般都是静态方法,这样利用了静态方法的特性,使得可以不实例化这个工具类而直接调用工具类的里面的方法。但我觉得静态方法的本意不应该是这个目的。
说一下我会有这种想法的起因:
我现在有这样一个工具类,其中的方法是为了将一行文本( String 类型)按照分隔符分割后,依序构成一个 JavaBean 后返回。
比如文本是:
『 Tea_LongJin_20180608_100.00 』
那么就会转为一个 Tea 类,teaname="LongJin" productime="20180608" price = 100.00 并返回
如果文本开头是 coffee,那么又要调用 ReadCoffee 方法。(调用谁的条件判断不是工具类和工具方法负责的,工具方法只是被调用。)
那么将这一行文本分割转为字符串数组的过程中用到了『 public String[] split(String regex,int limit) 』方法,其中第二个参数是这行文本中分隔符的个数。
那我就想,不论是读对应哪个类的文本,数分隔符的方法都是一样的步骤。那应该将它提出来。

而这个抽象出来的方法为了能在静态的工具方法中被使用,就必须要是静态的。然而因为这个方法不应该被外部调用,所以又要私有化。这样一个 private static 的方法就让我觉得很怪异很不应该。。。

我整个想法是否有哪里出错了呢?望指正。谢谢。
1522 次点击
所在节点    问与答
4 条回复
3pmtea
2018-06-08 22:13:59 +08:00
private static 方法好像没啥毛病,jdk 也这么用

非要用 non-static 方法来做的话,你也可以弄一个 inner private static class 去做你的字符串解析工作,然后在工具类里给一个 private static final field,这样也顺便实现了“一个类只做一件事”
feiyuanqiu
2018-06-08 22:22:28 +08:00
静态方法就是函数

你这个例子实际上就是序列化与反序列化,照着 Serializable 接口按自己的序列化规则实现就行
JackEggie
2018-06-08 22:54:38 +08:00
抽象出来的通用工具方法应该放到 util 包里给项目中的所有类使用吧。。。
JackEggie
2018-06-08 22:58:21 +08:00
静态的成员,包括方法,应该是类的属性吧。如果是工具类的属性,那就理所当然是工具类提供的静态工具方法咯。这样也方便了其它类的静态方法调用啦。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/461630

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX