用于检查整数符号的 Java 设计模式

标签 java design-patterns

我是从 C++ 转到 Java,不用说,某些事情看起来有点不自然(相对于我的 C++ 背景)。例如,Java 没有无符号数字类型。所以我很好奇在某些情况下是否有最好的或传统的方法来检查标志。

例如,假设我正在设计一个动态数组类。我想跟踪数组的大小,我可以将其声明为

私有(private)整数长度

如果一个数组需要调整大小,它应该通过一组 block_size 来调整大小,所以我也应该有

private int block_size

现在,我应该允许用户设置block_size,我当然应该有类似的东西

public void setValueAt(int pos) { ... }
public void setBlockSize(int bsize) { ... }

现在,因为我们没有无符号数字类型,而且因为——在 OOD 的最佳实践中——对象应该是一致的,我应该防止像 setValueAt(-1) 这样的错误.

显而易见的方法是一个简单的if 条件检查。有人可能会争辩说我可以简单地让它滑动,因为在引用数组时,Java 会提示负索引并抛出编译时错误。如果在编译时索引是已知的,这很好,但如果不是,则不是。

更糟糕的情况是 block_size。在调整大小之前,程序可以运行很长时间,此时可能会发生运行时异常或不可预测的行为。

所以我的问题是:

What is the (or one of the) Java idiomatic ways/design patterns to handle this? Am I making it too complicated (i.e. should I just stick with the if checks and get on with life)?

这个问题,我认为,在不那么琐碎的上下文中(比上面的例子)变得不那么琐碎。例如,我不想用 if 检查污染我的代码。将任务委托(delegate)给指定的错误处理程序会很好,这应该是类型固有的。例如:

Would it be more idiomatic to write a wrapper around the int type? Is there an elegant/idiomatic way to use Integer for this purpose?

编辑

我似乎收到了很多关于此的评论(我很感激),但许多人并没有关注实际问题。数组类就是一个例子。我要求一种通用的、惯用的方法来处理可能在许多不同情况下出现的一般情况。

最佳答案

如果您不想在每个方法中进行多次检查来污染您的代码,请查看 guava library .它实际上阻止您编写大量自行车,提供通用功能,这些功能不是(在编写库的时候没有)在 Java SE 中实现的。例如,它为您提供单行检查,例如:

Preconditions.checkNotNull(obj);

Strings.isNullOrEmpty(str);

顺便说一句,此功能的一部分现在由 Objects 类在 Java 8 中实现。

注意:在 Java 中将可调整大小的数组作为一个单独的类进行讨论时,我感到非常不自在。请注意,ArrayList 解决了完全相同的问题。

关于用于检查整数符号的 Java 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645523/

相关文章:

c# - Action<T> 与标准返回

oop - 面向对象或模块化文件和数据 I/O 的技术?

java - 从注释处理器应用 CGLib 代理

java - "No suitable Driver were found"出现此错误

java - 如何在 JUnit 中刷新 App Engine SearchServiceFactory 异步操作?

java - 循环中的条件条件

java - 如何对具有相同数据的不同类的两个对象进行单元测试?

Mysql共享列减少重复

java - 多个 DAO 不完整实现设计

java - 设计模式: Callback as a method parameter