Java 和优雅

Java 语言的语法是以优雅著称的。至少我接触过的很多书籍、资料是这么说的,当然,以我数百行的 Java 编程经验来讲,我也在大多数的情况下感受到了这种优雅,直到遇到一个特殊情况。

这个情况是这样的。假设你写了一个数据访问的管理器,其中有一个方法提供给使用者以获取数据的能力,用我熟悉的 C 或者 C++,我会很快写出类似如下的函数定义:

size_t DataManager_GetData(void* buffer, size_t bufferSize);

或者

class CDataManager
{
    //...
    size_t GetData(void* buffer, size_t bufferSize);
    // ...
};

输入的参数为接收数据的缓冲区以及缓冲区的大小,返回值则是返回数据的大小。当然,Java 支持这样的一个小需求毫无压力,示例代码我就不献丑了。接下来,对这个方法的需求略微有了一点增加,除了要返回取到的数据的大小之外,希望顺便还能给出一个指示,表示缓冲区内是否还有更多的数据可供获取。根据此需求,C++ 的方法原型通常会做如下的修订:

size_t GetData(void* buffer, size_t bufferSize, bool& moreData);

那么 Java 呢,应该如何写出提供相同功能的方法原型?作为一个菜鸟,我尝试了传入一个 boolean 的参数(因为有朋友告诉过我 Java 的参数其实是“引用”,当然了,看到本文的朋友千万别这么天真地相信,否则我也不会傻乎乎写这篇文章),很显然地失败了。后来我又自作聪明地想起原生类型和对象类型在 Java 中似乎有所不同,于是把 boolean 改成 Boolean,满怀希望地出现奇迹,也以失败告终。

于是我求助于同事和朋友。答案很多。例如,把数据量和标记映射为一个条目,返回一个 Map 类型的对象。再例如,返回一个对象数组,如此等等。是的,我知道他们都是可以解决这个问题的方法,但是,我们呼应一下标题,我认为都不够优雅。因为我要同时返回的这两个数据,事实上相互之间的关系很弱,本质上是两个/两类信息,硬生生捏合在一起做为一个对象(Object,或者说物体)返回,我觉得很丑陋。可惜到目前我自己还没有能够想出更好的方案。

大家呢?敬请不吝赐教。当然,最好不要质疑需求,说是分成两次调用什么的……


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值