Java通用抽象方法参数

时间:2016-10-29 00:04:09

标签: java abstract

我正在努力更好地掌握抽象并遇到问题。

我有以下课程:

抽象类:

public abstract class Box {
    abstract <T extends Mass> void putMassInBox(T mass);
}

实现:

public class CircleBox extends Box {

    @Override
    void putMassInBox(Mass mass) {
        CircleMass circleMass = (CircleMass) mass;
    }   

}

下面的一个会导致错误,因为它无法将SquareMass识别为Mass,或者我告诉它不正确的方法。

public class SquareBox extends Box {

    @Override
    void putMassInBox(SquareMass mass) {
        // TODO Auto-generated method stub

    }

}

这是Mass接口:

public interface Mass {

}

以下是它的实现:

public class CircleMass implements Mass {

}


public class SquareMass implements Mass {

}

所以我想强制一个方法根据它的实现来获取参数。我知道我可以在circleMass示例中投射质量,但我想知道这是否是最好的方法呢?是否可以强制使用任何对象扩展不同对象的方法?是值得付出额外努力还是采用标准方式进行这种抽象。

1 个答案:

答案 0 :(得分:5)

你必须使类通用,而不是方法:

public abstract class Box<T extends Mass> {
    abstract void putMassInBox(T mass);
}

public class CircleBox extends Box<CircleMass> {

    @Override
    void putMassInBox(CircleMass mass) {
    }   

}