Java泛型抽象方法参数

标签 java abstract

我试图更好地掌握抽象,但遇到了问题。

我有以下类(class):

抽象类:

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

    }

}

这是质量界面:

public interface Mass {

}

这是它的实现:

public class CircleMass implements Mass {

}


public class SquareMass implements Mass {

}

所以我想强制一个方法根据它的实现来接受参数。我知道我可以像circleMass 示例中那样转换质量,但我想知道这是否是最好的方法?是否可以强制采用任何对象扩展不同对象的方法?是否值得付出额外的努力,或者正在类型转换进行这种抽象的标准方法。

最佳答案

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

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

public class CircleBox extends Box<CircleMass> {

    @Override
    void putMassInBox(CircleMass mass) {
    }   

}

关于Java泛型抽象方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314719/

相关文章:

java - Eclipse 代码完成 (Java)/IntelliSense,类似于 Visual Studio (C#)

java - 在 XSSF 工作簿上设置密码保护

java - 有没有办法在不使用文件扩展名的情况下识别 java 中的音频或图像文件?

java - 如何从父级的方法访问子级的继承成员

java - 覆盖Java中的抽象泛型方法

java - 在 Java 中使用 extends 会导致封闭实例错误

java - 在 imageview 中显示来自 firebase 数据库的图像

java - 在具体的 JPA 类之间共享 Java 实现的最佳方法是什么?

java - 将 JsonObjectRequest 转换为请求

java - Mongodb java驱动聚合的游标没有skip方法?