我有课可以说
Class Rectange{
int height;
int side;
}
我可以将这个类作为通用的所有情况?如何识别我们想写一个泛型类? 可能一个实际的例子会很好。
更新
制作我们的类泛型的用例是什么?
我们将使用泛型的真实场景?
答案 0 :(得分:3)
如果您希望任何提及的类型变量,您可以将此类设为通用。
目前,您的类只包含对int
类型的引用。如果要创建此类型变量,可以使用以下代码:
class Rectange<T extends Number> {
T height;
T side;
}
之后,您可以创建实例,使用Integer
或其他类型来存储height
和side
:
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;
}