gpt4 book ai didi

java - 普通多态性和使用泛型的多态性有什么区别?

转载 作者:行者123 更新时间:2023-12-04 10:52:05 25 4
gpt4 key购买 nike

这里有一个抽象类 BaseA。

//class definition
public abstract class BaseA {
void doSomething();
}

并且有两个客户端使用 BaseA 类,如下所示。
//the client A 
class clientA {
void clientA(BaseA obj){
obj.doSomething();
}
...

//the client B
class clientB<T extends BaseA> {
void methodB(T obj){
obj.doSomething();

}
...


问题是这两者有什么区别吗?
哪个更好,为什么?请指教。
*问题不限于表演。

最佳答案

ClientA的区别和 ClientBClientB不仅受 BaseA 的约束还有T .如 T无法缩小 BaseA 中任何方法的范围界面是一样的。

根据文档 advantages of generics是:

  • Stronger type checks
  • Elimination of casts
  • Enabling generic algorithms


当泛型的使用受到限制时,如问题所示,在这方面几乎没有好处。更强大的类型检查在这里适用。

主要区别在于 T extends BaseA强制参数的类型为 T .如果该类仅使用 BaseA BaseA 的任何子类可以传入方法中。

示例:
class SubA extends BaseA {}
class SubB extends BaseA {}

class ClientA {
void method(BaseA obj) {
obj.doSomething();
}
}
class ClientB<T extends BaseA> {
void method(T obj) {
obj.doSomething();
}
}

ClientA a = new ClientA();
a.method(new SubA());
a.method(new SubB());

ClientB<SubA> b = new ClientB<>();
b.method(new SubA());
b.method(new SubB()); // fails

虽然 ClientA允许任何 BaseA正在通过, ClientB允许将其使用限制为特定的子类型。

关于java - 普通多态性和使用泛型的多态性有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59432576/

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