gpt4 book ai didi

java - 通配符和一个实现两个接口(interface)的类的问题

转载 作者:行者123 更新时间:2023-12-02 00:50:52 25 4
gpt4 key购买 nike

我有这个问题。
我有class UserImpl implements MyUser, YourUserclass UsersGetterImpl implements MyUsersGetter, YourUsersGetter 。我想在 UsersGetterImpl 中实现一个方法,返回 List<MyUser> getUsers()对于 MyUsersGetterinterface , 和 List<YourUser> getUsers()对于 YourUsersGetterinterface ,但我不明白 getUsers() 的返回类型必须是什么里面UsersGetterImpl类 - 可能它必须是带有通配符的东西(例如 List<? extends UserImpl> getUsers() ,但不完全是这样,因为这个例子不起作用......)

最佳答案

很难说出你在问什么,但根据Java Language Specification :

在这样的情况下:

interface Fish { int getNumberOfScales(); }
interface StringBass { double getNumberOfScales(); }
class Bass implements Fish, StringBass {
// This declaration cannot be correct, no matter what type is used.
public ??? getNumberOfScales() { return 91; }
}

不可能声明一个名为 getNumberOfScales 的方法,其签名和返回类型与接口(interface) Fish 和接口(interface) StringBass 中声明的方法相同,因为一个类只能有一个具有给定签名的方法( §8.4)。因此,单个类不可能同时实现 Fish 接口(interface)和 StringBass 接口(interface)。

但是,如果两个接口(interface)都指定相同的返回类型,那么您可以继续实现该方法。如果MyUserYourUser有一个共同的祖先那么你可以做 List<? extends User>或者,如果它们没有共同点,您可以简单地使用 List<?>.

但到那时,您必须停下来考虑一下通用实现是否是您真正想要的。我怀疑如果您向我们提供有关您的问题的更多详细信息,可能会有更优雅的解决方案。

编辑:

根据您的评论,您想要类似...

interface MyUserGetter { List<? extends MyUser> getUsers(); }
interface YourUserGetter { List<? extends YourUser> getUsers(); }
class UserGetterImpl { List<? extends UserImpl> getUsers(); }

这未经测试,我猜有 50% 的机会工作。

架构建议是,您实际上可能需要一个接口(interface)的两个实现,而不是两个接口(interface)的单一实现:

interface User {}
class MyUser implements User {}
class YourUser implements User {}
interface UserGetter { List<? extends User> getUsers(); }

关于java - 通配符和一个实现两个接口(interface)的类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3247369/

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