何时将类编写为泛型类

时间:2015-08-19 09:01:25

标签: java generics

我有课可以说

Class Rectange{
    int height;
    int side;
}

我可以将这个类作为通用的所有情况?如何识别我们想写一个泛型类? 可能一个实际的例子会很好。

更新

  1. 制作我们的类泛型的用例是什么?

  2. 我们将使用泛型的真实场景?

3 个答案:

答案 0 :(得分:3)

如果您希望任何提及的类型变量,您可以将此类设为通用。

目前,您的类只包含对int类型的引用。如果要创建此类型变量,可以使用以下代码:

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

之后,您可以创建实例,使用Integer或其他类型来存储heightside

class Main {
    public static void main(String[] args) {
        Rectange<Integer> intRect = new Rectange<>();
        intRect.height = 12;
        Integer intHeight = intRect.height; // no cast needed, the height is guaranteed to be an int

        Rectange<Double> dblRect = new Rectange<>();
        dblRect.height = 1.20076;
        Double doubleHeight = dblRect.height; // this time, height is guaranteed to be an double
    }
}

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

答案 1 :(得分:1)

现实生活中的例子:我需要一个简单的处理器,它将采用许多值,并根据自然顺序返回最高,最低和中位数。我不知道它将操作哪种类型的对象(或者我知道,但不想将其限制为仅使用一种特定类型),并且我不希望它接受{{ 1}}以避免施法。所以我使这个类及其所有方法都通用:

Object

现在,public class MySimpleProcessor<T extends Comparable<T>> { public void putValue(T value) { /*...*/ } public T getHighest() { /*...*/ } public T getLowest() { /*...*/ } public T getMedian() { /*...*/ } } 可以对任何类似的对象进行操作:

MySimpleProcessor

答案 2 :(得分:0)

不要使用OOP作为意识形态,而是像帮助你解决问题的工具。首先编写两个类,如果它们使用相同的字段,则创建另外的基类以从中派生。 图形编辑程序示例:

Class PaintTool{
    protected int r, g, b;

}
Class Rectangle extends PaintTool{
    float x, y, width, height;
}

Class Brush extends PaintTool{
    float radius;
}