在Java中,泛型提供了类型安全的方式来创建可重用的类和方法。泛型支持协变和逆变,这有助于更好地理解和使用泛型类型。
协变是指子类型可以替换其父类型的情况。在Java中,泛型类型支持协变,这意味着你可以将一个子类型的泛型参数替换为其父类型的泛型参数,而不会导致编译错误。
例如,假设你有一个泛型接口Shape
:
public interface Shape<T> {
T getArea();
}
你可以创建一个继承自Shape
接口的Circle
类:
public class Circle<T> implements Shape<T> {
private T area;
@Override
public T getArea() {
return area;
}
// ... 其他代码
}
注意,Circle
类也使用了泛型参数T
。由于Java的泛型支持协变,你可以将Circle<Integer>
类型的对象赋值给Shape<?>
类型的变量:
Shape<?> shape = new Circle<>();
逆变是指父类型可以替换其子类型的情况。在Java中,泛型类型也支持逆变,但需要注意的是,逆变仅适用于泛型参数的限定类型(通常是? extends T
或? super T
)。
例如,假设你有一个泛型接口Drawable
:
public interface Drawable<T> {
void draw(T object);
}
你可以创建一个继承自Drawable
接口的Shape
类:
public class Shape<T> implements Drawable<T> {
@Override
public void draw(T object) {
// ... 绘制逻辑
}
// ... 其他代码
}
由于Java的泛型支持逆变,你可以将Drawable<Shape>
类型的对象赋值给Drawable<? super Shape>
类型的变量:
Drawable<?> drawable = new Shape<>();
drawable.draw(new Shape<>());
? extends T
或? super T
)。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。