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