java - 抽象基类的通用数据类型返回

标签 java generics return abstract

我正在开发一个项目,其中的要求之一是我们使用通用数据类型。(其他要求:抽象类、继承、保存/加载函数、聚合和组合)

我想我应该创建一个库来满足所有要求,但很难想出何时/何处使用通用数据类型的好主意,然后很明显,如果我有一个类称为 Media 和两个称为 BookCD 的子类,书籍的长度为 int(pages),CD 的长度为 double(分钟和秒) )

我认为在媒体中制作此内容会有所帮助:

    public abstract class Media<T>{
        private T length;
        //lots of other variables & methods here, took out for sake of cutting to the chase

        public T getLength(){
            return length;
        }

        public void setLength(T length){
            this.length = length;
        }
    }

问题:

但现在的问题是,当它没有在 getLength 中收到类型时,它如何返回一个类型,因此不知道它是什么类型,除非以某种方式设置它?或者解决方案是让每个子类在构造函数中调用此函数一次来设置它?

我可以在子类 BookCD 中以某种方式覆盖 private T length; 变量吗?只是为了设置它们的类型,以便 getLength 能够按其应有的方式运行,或者还有其他解决方案吗?

可以选择在其他地方使用通用数据类型,但我只是不知道在哪里合适,我的教授们甚至在满足要求时都挑剔,所以他们让我知道,如果他们不让我通过,他们就会让我失望。认为某些东西“使用不当”或“不是一个好例子”,即使“礼仪”不是必需的。

最佳答案

感谢 Andy Turner 提供的解决方案以及其他人的贡献,但他给出了有帮助的答案,如下:

我做了什么:

class Book extends Media{
...
}
class CD extends Media{
...
}

我应该添加的内容:

class Book extends Media<Integer>{
...
}
class CD extends Media<Double>{
...
}

关于java - 抽象基类的通用数据类型返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413605/

相关文章:

java - 运行时通用类型 Java

java - return 在循环中到底做了什么?

c++ - 方法调用链接;返回指针还是引用?

python - 数字中所有数字的递归和

java - 如何转换 2 个日期,一个为 BST(当前日期),另一个为 GMT,以便可以比较方法之前和之后的日期?

java - Java中如何找到方法调用的行号

java - 将文本文件从大型机发送到 IBM MQ

java - RxJava2 : Alternative to rx. 可观察方法第一个(谓词)

class - TypeScript 中的泛型 : How to infer the type of an instance from the class

C# 如何检查一个类是否实现了泛型接口(interface)?