所以,我有一个表示Input类型对象的抽象类 -
public abstract class Input<E>
我有两个扩展它的类,一个是ButtonInput,另一个是TextInput。两者都扩展了输入,所以它并不重要。我只是用TextInput来解释 这是TextInput类的defention:
public class TextInput extends Input<TextInput>
我尝试做的是将此作为E(在这种情况下为TextInput)返回 -
public E setTextColor(Color color) {
this.colorText = color;
return (E)this;
}
所以,如果我打电话给例如:
new TextInput().setColor(Color.black)
它应该返回TextInput。它正在工作,但它显示以下警告 -
警告:[未选中]未经检查的演员 返回(E)这个; 要求:E
中声明的Object
发现:输入
其中E是类型变量:
E扩展在类Input
关于以下代码行 -
return (E) this;
有人知道如何解决吗? 感谢
答案 0 :(得分:5)
这是我过去用于抽象构建器模式中解决此类问题的模式。它依赖于一个抽象的me()
方法,该方法被重写以返回对具体对象的引用。
abstract class Foo<T> {
protected abstract T me();
public T baz() {
return me();
}
}
class Bar extends Foo<Bar> {
protected Bar me() {
return this;
}
}