Java 确保对象始终是列表的成员?

Java 确保对象始终是列表的成员?,java,list,design-patterns,Java,List,Design Patterns,想象一下: 每个单词都是一个字符列表。然而,不可能有字符本身,它总是必须是一个单词的一部分 因此单词class可以如下所示: class Word extends List<MyCharacter> 下面是它的使用方法: public static void main(String[] args) { Word word = new Word(); // word.add(new MyCharacter("a")); // as intended: not po

想象一下:

每个单词都是一个字符列表。然而,不可能有字符本身,它总是必须是一个单词的一部分

因此单词class可以如下所示:

class Word extends List<MyCharacter>
下面是它的使用方法:

public static void main(String[] args) {

    Word word = new Word();

    // word.add(new MyCharacter("a")); // as intended: not possible, because MyCharacter class can't be accessed
    word.addCharacter("a"); // ok           
}
也许让Character成为Word的私有内部类,并向Word添加addCharacter(stringcharacter)之类的方法

是的或者只声明
MyCharacter
private的构造函数和
MyCharacter
final
。或者在
Word
之外声明
MyCharacter
类,该类具有“包私有”构造函数。或者在
MyCharacter
中有一种(静态)工厂方法,比如
appendToWord(Word w,Character char)
和一个私有构造函数。或者…:-)

编辑:我首先误解了这个问题:

是否可以让Word用私有内部字符类扩展List类


Word
可以以任何方式扩展
List
。但是,正如您所理解的,从理论上讲,这是可能的。一个问题是
Character
已经是java类了。另外,如果您使用的是Eclipse,它将不允许您声明

public class Word extends ArrayList<Letter> {
    private class Letter {
        //...
    }
}
公共类Word扩展了ArrayList{
私人信件{
//...
}
}
除非你让这封信受到最多的保护。我不确定这是否是一个Eclipse问题,或者Java是否也会阻止您


关于您的超类问题,这是因为您不能使用列表,因为它只是一个接口。您必须使用实现它的东西,比如ArrayList

对于
Character
,您是指
java.lang.Character
,还是指您自己的类之一?用与现有标准类相同的名称创建自己的类不是一个好主意。任何其他对象中都没有对象。只有参考资料。所有的引用,无论是出自《法典》列表的精髓,还是出自《法典》一词的方法,或者完全出自其他地方,在法律面前都是平等的。从语言的角度来看,您的查询根本没有意义,您将很难真正实现它。也许可以重新措辞,以反映您的实际目标?谢谢您的提示,这是我自己的课程之一。汉诺,我无法完全理解您的回答,您能修改我发布的示例吗?谢谢:-)如果我声明一个构造函数是私有的,我怎么能实例化这样一个类呢?“它只工作”;)看这里的例子:谢谢你更新我的问题和你的回复,汉诺,我的问题一开始不清楚,是我的错。也谢谢你的提示,尽管我觉得@CapnSmack的想法更合适。Hanno,有趣的链接,所以使内部类public和构造函数private的工作原理相同,我刚刚测试了这个。该死,我不能接受两个回复):你能在回复中添加你的评论吗?你的回答被否决了:-)谢谢你的提示,我现在得到了一个工作示例,请参见上文:-)“该字符中会出现一个问题,它已经是java类了。”-这无论如何都不应该是一个问题。拥有多个同名的类是完全可以的,包括JavaAPI提供的那些类的名称。
public class Word extends ArrayList<Letter> {
    private class Letter {
        //...
    }
}