Java String 里的 substring 操作,这个相信很多 Java 开发者都有感受。
public String substring(int beginIndex, int endIndex)
如果传入的参数越界,或者 beginIndex 大于 endIndex ,它都会抛异常,使用者不得不在传入之前检查一下。
个人觉得更好的方式是:substring 返回该字符串和参数指定范围的交集就好了,如果越界或者 beginIndex 大于 endIndex ,就返回空字符串。Apache Common 的 StringUtils 就是这么设计的。
你可能会说调用方可能会误用,开发者应该想办法避免被误用。其实很难避免调用方误用,而我们有时会为了避免误用,反而会引入很多不必要的复杂性,不管是对调用方还是对实现方,这是得不偿失的。。。
1
golangLover 2022-03-26 00:40:21 +08:00 via Android
你会发现所有语言官方设计的 lib 都挺渣,java 已经算不错的了。而且有 apache common 辅助
|
2
zmal 2022-03-26 00:46:26 +08:00 via iPhone
好像 python 就是这样做的?
API 的设计是一门科学,各自有不同的取舍。 |
3
potatowish 2022-03-26 01:05:57 +08:00 via iPhone 1
这种反而是极好的,作为基础 API 语义就要更加明确,越接近上层应用越需要考虑其健壮性
|
4
xuanbg 2022-03-26 09:27:59 +08:00
自己封装 util 呀
|
5
1194129822 2022-03-26 10:23:38 +08:00
标准库 API 设计者比你懂,Java 标准库 API 不说是最好,也是所有语言前几的水平。真有问题的设计也有一套标准流程修改。你如果质疑,至少你需要达到他们水平,按照标准规则参与吧。不然和空想,民科有什么区别?
|
6
seakingii 2022-03-26 15:00:21 +08:00
标准库的 API 定义应该语义清晰,而不是像楼主说的:这样也可以,那样也可以。。。
第三方库或者自己写的包装库,可以根据不同的需求(比如更方便),做额外的封装,但最底层的基础库,还是逻辑简单点好。 另外,假设标准库按楼主说的这样做了:index 不正确,返回空字符串。说不定哪天楼主或者其它用户又会来抱怨了:为什么不正确的 index 也能返回空字符串,我哪知道是真的是空字符串还是因为 index 不正确导致的空字符串。。。。 |