gpt4 book ai didi

java - 类型参数名称 P 和 R 的含义是什么?它们如何使用?

转载 作者:行者123 更新时间:2023-11-30 04:11:44 24 4
gpt4 key购买 nike

我最近在 SO ( How do I use double dispatch to analyze intersection of graphic primitives? ) 上发布了一个问题,其中一个答案(我已接受)使用了泛型,包括 <P><R> 。它们不在 Oracle 文档 Java generics list 中但我已经看到它们在其他地方使用(例如 Generics overkill in visitor pattern ) - 它们是否特定于访问者模式?为什么都是 superextends用过吗?

代码是:

public interface ShapeVisitor<P, R> { 
R visitRect(Rect rect, P param);
R visitLine(Line line, P param);
R visitText(Text text, P param);
}

public interface Shape {
<P, R> R accept(P param, ShapeVisitor<? super P, ? extends R> visitor);
Shape intersectionWith(Shape shape);
}

public class Rect implements Shape {

public <P, R> R accept(P param, ShapeVisitor<? super P, ? extends R> visitor) {
return visitor.visitRect(this, param);
}

public Shape intersectionWith(Shape shape) {
return shape.accept(this, RectIntersection);
}

public static ShapeVisitor<Rect, Shape> RectIntersection = new ShapeVisitor<Rect, Shape>() {
public Shape visitRect(Rect otherShape, Rect thisShape) {
// TODO...
}
public Shape visitLine(Line otherShape, Rect thisShape) {
// TODO...
}
public Shape visitText(Text otherShape, Rect thisShape) {
// TODO...
}
};
}

我将不胜感激

最佳答案

名称PR只是标识符。从它们的使用方式来看,我认为它们分别指的是“参数”和“返回值”。

现在,在 Shape.accept 方法中,可以将参数设置为逆变,这就是为什么您会看到 superP ,以及一个返回值协变体,这就是为什么你会看到 extendsR 在那里。

关于java - 类型参数名称 P 和 R 的含义是什么?它们如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19449519/

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