【发布时间】:2014-06-08 17:02:53
【问题描述】:
所以,我有一个代表输入类型对象的抽象类 -
public abstract class Input<E>
我有两个扩展它的类,一个是 ButtonInput,另一个是 TextInput。两者都扩展输入,所以它并不重要。我将使用 TextInput 来解释。
这是 TextInput 类的定义:
public class TextInput extends Input<TextInput>
我想要做的是将 this 返回为 E(在这种情况下为 TextInput)-
public E setTextColor(Color color) {
this.colorText = color;
return (E)this;
}
所以,如果我打电话给例如:
new TextInput().setColor(Color.black)
它应该返回 TextInput。它正在工作,但它显示以下警告 -
警告:[unchecked] 未经检查的演员表
返回 (E) 这个; 必需:E
找到:输入
其中 E 是类型变量:
E 扩展在 Input 类中声明的 Object
关于以下代码行 -
return (E) this;
有人知道怎么解决吗?
谢谢
【问题讨论】:
-
这个方法不需要
<E extends Input>,E已经参数化了。 -
还有,什么是ButtonInput?
-
@OliCharlesworth 我已经删除了你所说的内容,现在当我编译 lint 时会警告我未经检查的演员表。而 ButtonInput 只是另一个代表图形按钮的类
-
但是 ButtonInput 不在您向我们展示的代码中。请构建一个完整的测试用例。
-
你不应该返回 "Input" 而不是 "E" 吗?我建议您观看此视频:sites.google.com/site/io/effective-java-reloaded,此处演示:14b1424d-a-62cb3a1a-s-sites.googlegroups.com/site/io/…