我是第一次玩类继承等,但我对如何检索我设置的信息感到困惑.我有一个名为ClientInfo的类,在那个类中只有名称和年龄.我有一个类,它扩展了这个名为ClientAdditionalInfo的类,它只包含一个名为'additionalinfo'的字符串.
当我将扩展的附加信息添加到链接列表时,我无法将其检索出来,但我仍然可以获得年龄和名称.见下文:
List<ClientInfo> list = new LinkedList<>();
ClientAdditionalInfo additionalinfo = new ClientAdditionalInfo();
additionalinfo.additionalinfo = "hi";
additionalinfo.age = 4;
additionalinfo.name = "name";
list.add(additionalinfo);
System.out.println(list.get(0).age);
System.out.println(list.get(0).name);
//System.out.println(list.get(0).additionalinfo); how do i do this?
Run Code Online (Sandbox Code Playgroud)
现在,我意识到我可以将列表所持有的类更改为"ClientAdditionalInfo",但是如果我想在此列表中使用更多类,如ClientLocation,那么这只会引入另一个问题(我知道我可以放这些变量在ClientInfo中)但我只是想传达一个观点,因为我可以看到一些情况,在一个列表中可能需要多个类的扩展.
对不起,这是一个非常糟糕的例子,我意识到我可以用动物或其他东西来做到更清楚,但我希望你能看到我的问题.
谢谢你的帮助.本
您需要转换结果list.get(0)- 编译器正在抱怨,因为List<ClientInfo>.get(...)肯定会返回对ClientInfo兼容对象(或null)的引用,但它可能不是ClientAdditionalInfo:
ClientAdditionalInfo fetched = (ClientAdditionalInfo) list.get(0);
System.out.println(fetched.age);
System.out.println(fetched.name);
System.out.println(fetched.additionalinfo);
Run Code Online (Sandbox Code Playgroud)
请注意,ClassCastException如果第一个元素不是 a ,你将得到一个ClientAdditionalInfo.你可以检查:
ClientInfo info = list.get(0);
if (info instanceof ClientAdditionalInfo)
{
ClientAdditionalInfo fetched = (ClientAdditionalInfo) info;
...
}
Run Code Online (Sandbox Code Playgroud)
这种事情通常是一种设计气味 - 通常如果你需要知道一个集合的元素是一个特定的子类(而不是让子类在需要自定义行为的情况下覆盖超类中的方法),那么集合类型应该是用该子类指定.情况并非总是如此,但至少值得考虑这是否应该是一个List<ClientAdditionalInfo>.
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |