Java 泛型转换

标签 java generics

我已经构建了一个通用数据容器,现在我想根据数据的类型来操作数据。但是,我收到不兼容类型的警告。我做错了什么?

Type _Value;
public void set(Type t) throws Exception {
   if (_Value instanceof Integer
     && t instanceof Integer) {
       _Value = (((Integer) t
         - _MinValue + getRange())
            % getRange()) + _MinValue;
         }
       else if (_Value instanceof Boolean
         && t instanceof Boolean) {
 _Value = t;
            }
       else throw new Exception("Invalid type");
  }

最佳答案

首先,您没有遵循 Sun Java 编码标准。变量名称应以小写字母开头。我个人的品味会说也失去那个前导下划线。如果必须说明变量是类成员,请使用“this.”。 IDE 足够智能来显示它们。当您拥有的只是一个无法进行文本突出显示的文本编辑器时,用前导下划线表示类成员变量的古老 C++ 约定可能是一个好主意,但现在情况并非如此。

至于您的“instanceof”构造,这违背了所有面向对象的原则。

您不能将类型相关的操作嵌入到容器本身内。我的建议是编写容器并将其包含的项目的操作外部化为迭代器、仿函数或某种类型的访问者。您可以使用泛型类型来指定类型,而不必求助于“instanceof”。

这是一个更加简洁的设计:没有“instanceof”并且适本地分离了关注点。

关于Java 泛型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2980414/

相关文章:

c# - 比较 "Apple"和 "Orange"对象的列表

java - 使用泛型类型的自定义迭代器

java - 所有基于 java mvc 的框架都要求您连接配置文件中的每个文件吗?

java - 为什么 `exif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(ExifInterface.ORIENTATION_ROTATE_270));` 什么也不做?

c# - 将 KeyValuePair 列表的内容写入文本文件 - 有一个问题

c++ - 简单的 rust 通用/模板添加功能

Java - 是否可以在不强制转换的情况下读取序列化对象?

java - 我们可以使用硬盘空间作为jvm内存吗

java - Google App Engine - Servlet(错误 : Expecting a stackmap frame at branch target 44 in method test.)

c# - c++ auto_ptr 与托管指针有何关系(Java、C#...)