Java接口:接口能否在链表中使用?

3

我刚开始学习Java,想知道是否有一种方法可以在LinkedList中使用接口。我有一个名为Question的接口,我从它实现了两个类:1)MCQ 2)TrueFalse。我想要一个问题接口的列表,这样我就可以在列表中随机使用MCQ和TrueFalse。在Java中是否可能实现?以下是我目前的代码:

private static List<Question> Questions; //declaring in a class

Questions = new LinkedList<Question>(); //creating a linkedlist

然后只需简单地添加多项选择题和判断题即可。

1
你收到了什么错误?在我看来它看起来很好,我建议你试一下。 - Peter Lawrey
没有错误。只是澄清一个概念。谢谢 :) - fur866
没有问题。 - Wololo
关于概念,Java指南规定字段/变量名称以小写字母开头。 - Andreas
使用接口不仅是正确的,而且是最佳实践,因为它使测试更容易,即您可以使用使用该接口的“模拟对象”进行测试。 - Tilman Hausherr
2个回答

1

是的,您可以将接口用作链表的类型参数。

您应该在接口中定义足够的方法,以便能够处理所有有用的MCQ和TrueFalse功能,而无需进行向下转换。


0

你所写的是真实有效的。

questions = new LinkedList<Question>(); //creating a linkedlist

该函数接受所有类型的Question对象。要将MCQ添加到其中,唯一的规则是您的MCQTrueFalse必须实现Question接口。如果您已经这样做了,那就没问题。

但是要小心访问它们。由于您是随机获取对象,因此您永远不知道您会得到哪个对象。如果您将MCQ分配给TrueFalse,则会发生ClassCastException。为避免这种情况,请始终使用其类型(Question)。


如果可以避免,就不要进行向下转型。这是一种代码异味。因此,我的答案提到了在接口中添加足够的方法,以允许执行特定于类型的操作而无需进行向下转型。 - C. K. Young
@ChrisJester-Young 我正在添加这一行文本 为了避免这种情况,请始终使用它的类型(Question) - Suresh Atta
@ChrisJester-Young 我没有建议在这里进行强制转换。 ::::) - Suresh Atta
编译器不允许你将一个Question赋值给MCQTrueFalse,除非进行向下转型;所以如果你不进行向下转型,就不会导致ClassCastException错误发生。;-) - C. K. Young

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接