Java 何时将类编写为泛型类

Java 何时将类编写为泛型类,java,generics,Java,Generics,我有课,让我们说吧 Class Rectange{ int height; int side; } 在哪些情况下我可以使这个类成为泛型类?如何确定要编写泛型类? 也许一个实际的例子会很好 更新 使我们的类成为泛型的用例是什么 我们将使用泛型的真实场景 如果希望所提到的任何类型都是变量,则可以将此类设置为泛型 当前,您的类仅包含对类型int的引用。如果要生成此类型变量,可以使用以下代码: class Rectange<T extends Number> { T

我有课,让我们说吧

Class Rectange{
    int height;
    int side;
}
在哪些情况下我可以使这个类成为泛型类?如何确定要编写泛型类? 也许一个实际的例子会很好

更新

  • 使我们的类成为泛型的用例是什么

  • 我们将使用泛型的真实场景


  • 如果希望所提到的任何类型都是变量,则可以将此类设置为泛型

    当前,您的类仅包含对类型
    int
    的引用。如果要生成此类型变量,可以使用以下代码:

    class Rectange<T extends Number> {
        T height;
        T side;
    }
    

    作为一个结论我会说:如果必须使类型变为变量,请使用泛型。因此,根据您的用例,使用泛型可能是有用的。

    不要将OOP作为一种思想,而应该像一个工具一样帮助您解决问题。首先编写两个类,如果它们使用相同的字段,则创建要从中派生的附加基类。 图形编辑程序示例:

    Class PaintTool{
        protected int r, g, b;
    
    }
    Class Rectangle extends PaintTool{
        float x, y, width, height;
    }
    
    Class Brush extends PaintTool{
        float radius;
    }
    

    现实生活中的例子:我需要一个简单的处理器,它将采取许多价值观,并返回最高,最低和中位数,根据自然排序。我不知道它将操作哪种类型的对象(或者我知道,但不想限制它只使用一种特定类型),我也不希望它接受
    Object
    以避免强制转换。因此,我将该类及其所有方法设置为泛型:

    public class MySimpleProcessor<T extends Comparable<T>> {
    
        public void putValue(T value) { /*...*/ }
        public T getHighest()         { /*...*/ }
        public T getLowest()          { /*...*/ }
        public T getMedian()          { /*...*/ }
    } 
    

    可能是一个很好的起点。我认为最实用的例子是
    列表
    @SashaSalauyou,这取决于用例。更好,但我仍然不明白为什么不简单地将
    编号
    用于属性:),+1表示解释清楚answer@SashaSalauyou我添加了字段的用法-以显示其优点:访问字段时无需强制转换。感谢您的注意(以及向上投票:)。我明白,如果我想将我的类型设置为变量,那么我们可以使用泛型,但是您是否有一些实用的示例或类似的流程图,以便我可以决定编写泛型类?@eatSleepCode泛型可以帮助您避免类型转换。如果不使用泛型和类型转换就可以找到解决方案,那么不要使用泛型。
    public class MySimpleProcessor<T extends Comparable<T>> {
    
        public void putValue(T value) { /*...*/ }
        public T getHighest()         { /*...*/ }
        public T getLowest()          { /*...*/ }
        public T getMedian()          { /*...*/ }
    } 
    
    MySimpleProcessor<String> stringProcessor;             // will accept and return strings
    MySimpleProcessor<Integer> intProcessor;               // will accept and return integers
    MySimpleProcessor<AnotherComparable> anotherProcessor; // will operate on some other type