2010-06-05 80 views
0

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

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"); 
    } 
+0

显示如何定义类以及如何构造实例。 – 2010-06-05 12:59:28

回答

2

您没有遵循Sun的Java编码标准。变量名称应以小写字母开头。我个人的口味也会失去这种领先的下划线。如果你必须说明一个变量是一个类成员,使用“this。”。 IDE足够聪明,可以显示它们。当您拥有的文本编辑器无法进行文本高亮显示时,那种用前导下划线表示类成员变量的古老C++惯例可能是一个好主意,但现在并非如此。

至于你的“instanceof”构造,这违背了每个面向对象的原则。

您不能在容器内部嵌入依赖于类型的操作。我的建议是编写容器,并将其包含的项目的操作外部化为Iterator,Functor或某种访问者。您可以使用泛型类型来指定类型,而不必诉诸于“instanceof”。

这是一个更清洁的设计:没有“instanceof”和适当的问题分离。

0

如果Type是java.reflect.Type,那么它永远不能是一个整数或布尔值。它只是一个对象的接口,用于存放有关类型,类,接口的信息,它们实际上不是该类型,类,接口的对象。你应该得到错误,而不是警告。也许你应该使用Object而不是Type,或者你是否想要反思性地做些事情?