从泛型抽象类java返回子类

时间:2014-06-08 08:06:03

标签: java generics

所以,我有一个表示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
    发现:输入
    其中E是类型变量:
      E扩展在类Input

中声明的Object

关于以下代码行 -

 return (E) this;

有人知道如何解决吗? 感谢

1 个答案:

答案 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;
    }
}