首页 >Java >java教程 >从异构集合中检索对象时,泛型如何消除类型转换?

从异构集合中检索对象时,泛型如何消除类型转换?

Susan Sarandon
Susan Sarandon原创
2024-12-24 00:19:10279浏览

How Can Generics Eliminate Typecasting When Retrieving Objects from Heterogeneous Collections?

使用返回类型中的泛型克服类型转换

在 OOP 编程中,类通常维护相关对象的集合。例如,Animal 类可能会跟踪朋友列表,该列表可以是各种子类(例如 Dog 和 Duck)的实例。

传统上,由于朋友的异构性,从该列表中检索特定朋友需要进行类型转换。集合。这会产生如下代码:

Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());

((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();

为了避免这种繁琐的类型转换,请考虑使用泛型使 callFriend 方法的返回类型特定于正确的子类。但是,在这种特定场景中,将返回类型指定为参数,例如:

public <T extends Animal> T callFriend(String name, T unusedTypeObj) {
    return (T)friends.get(name);
}

没有帮助,因为未使用的类型参数在运行时不提供其他信息。

相反,有一种解决方法涉及将所需类型的类作为参数传递给 callFriend:

public <T extends Animal> T callFriend(String name, Class<T> type) {
    return type.cast(friends.get(name));
}

通过此实现,方法调用变为:

jerry.callFriend("spike", Dog.class).bark();
jerry.callFriend("quacker", Duck.class).quack();

此解决方案消除了运行时类型转换,并确保返回的对象可以安全地转换为所需的子类。

以上是从异构集合中检索对象时,泛型如何消除类型转换?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn