gpt4 book ai didi

java - 使用泛型参数比使用基类参数有什么好处吗?

转载 作者:行者123 更新时间:2023-11-30 02:38:36 26 4
gpt4 key购买 nike

请查看以下代码:

abstract class Shape {

protected double x;
protected double y;

public Shape(double x, double y) {
this.x = x;
this.y = y;
}

abstract protected void draw();
}

class Circle extends Shape {

public Circle(double x, double y, double r) {
super(x, y);
this.r = r;
}

protected double r;

protected void draw() {
System.out.println(String.format("Draw Circle. %f %f %f", x, y ,r));
}
}

class RenderEngine {
public static void draw1(Shape s) {
s.draw();
}

public static <T extends Shape> void draw2(T t) {
t.draw();
}
}

public class Runner {

@Test
public void run() {
Circle c = new Circle(1,2,3);
RenderEngine.draw1(c);
RenderEngine.draw2(c);
}
}

draw1()和draw2()有什么区别?哪一个更好? draw2()有更多的可扩展性吗?或者draw2()有更好的性能吗?

最佳答案

您的场景没有区别,因为正在绘制的对象的类型是在 drawX 方法内部使用的。

如果您的方法在其他上下文中使用 T,例如将原始数据返回给调用者,则会产生影响:

public static <T extends Shape> T draw2(T t) {
t.draw();
return t;
}

当子类在基类之上定义新方法时,这会产生不同的情况。例如,如果定义了Circle

double radius() { return r;}

您可以执行以下操作:

double r = RenderEngine.draw1(c).radius();

如果实现返回 Shape,这是不可能的。

注意:以上内容是为了演示差异,而不是表明新的实现比原始实现更可取。

关于java - 使用泛型参数比使用基类参数有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com