java - 在java中通过单个变量创建一个类

标签 java

如果您要创建一个要重用的库,那么在单个数据类型/变量上创建一个类是否有意义(或在一般用途中)。例如,

class DataSet
{
 private HashMap<String,String> mapping;
 public String getKey();
 public String getValue(String key);
}

假设我有一个方法 DataSet getDataSet() ,在我的 API 中使用这个返回 HashMap 的方法有意义还是应该返回 DataSet?

通过 java 集合类型返回 DataSet 的一些好处是 -

  • 代码既简单又非常冗长且易于阅读。
  • 在类(class)级别编写单元测试。
  • 对内部存储结构进行更精细的控制 - 用户无法直接修改该集合。

这种方法有缺点吗?或者是否总是建议特别是在创建 API/库时使用自己的类而不是已知的 java 数据类型?

最佳答案

一般包装

至于是否使用包装器的一般问题,这取决于原因,并且可能因用例而异。

包装器的一些优点

  • 类型安全:您可以包装原语以由编译器提供一些语义安全。例如,您可以使用类 Key其中包含单个字符串,而不仅仅是 String指出里面的字符串是一个键。当多个字符串可能会混淆时,这可能会对您有所帮助。
  • 访问控制:就像您所描述的那样,允许读/写访问等。
  • “手动”AOP:用逻辑包装 setters/getters。

一些缺点:

  • 代码更加冗长,可能更难理解/处理。
  • 需要付出更多努力来编写所有这些包装器(最好是文档)。
  • 集合、字符串等现有/常见数据类型得到了更广泛的理解,从而缓解了学习曲线。

返回 HashMap

如果你归还 map ,我就不会归还HashMap<String,String>而是Map<String, String>

包装器与 map

此外,这取决于您想要实现的目标。当然,使用包装器对象可以让您更好地控制 API,但代价是需要维护更多代码。

委托(delegate)

除了使用 DataSet正如您所描述的,委托(delegate)可能是一种选择,即看起来像映射但仅将调用委托(delegate)给内部映射的类。这样,您就可以在方法中添加功能,例如防止写入访问、以透明方式进行验证(对于只读映射,Collections 类中已经有委托(delegate)包装器)。

单元测试

至于“在类(class)级别编写单元测试”。我想说这也取决于包装器会做什么。如果它只是类似于 map ,那么为该包装器创建测试可能会有点浪费时间(您可以只使用现有的且已经测试过的 map 实现)。此外,您可能会测试对包装器/映射进行操作/返回的功能,并且这些测试基本上与您使用包装器还是映射无关。

这只是我的2 50 美分;)

关于java - 在java中通过单个变量创建一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34765910/

相关文章:

java - 将 Java 字符串转换为 Json

java - 如何在给定数字中缺少数字的文件中用数字拆分?

java - Java 语言的工作原理

java - 为什么 IntelliJ Idea 不自动完成 Jersey 资源 @Consumes 或 @Produces 注释内的 MediaType 枚举?

java - Snackbar的高度自定义

java - 在 cassandra 中管理多个数据中心集群

java - 为什么 websocket.send() 依赖于alert?

java - Java SOAP 传输层是否存在异常?

java - Tomcat6 Web 集群的 P2P Hazelcast session 复制 - session 同步失败

java - 无法解析符号 'ByteArrayBuffer'