词条 | 嵌套类型 |
释义 | 嵌套类型 (nested type)在另一个类型的范围内定义的类型。嵌套类型通常用于封装顶级类型的实现细节。 提示: 嵌套类型是作为某其他类型的成员的类型。嵌套类型应与其声明类型紧密关联,并且不得用作通用类型。有些开发人员会将嵌套类型弄混淆,因此嵌套类型不应是公开可见的,除非不得不这样做。在设计完善的库中,开发人员几乎不需要使用嵌套类型实例化对象或声明变量。 在声明类型使用和创建嵌套类型实例时,嵌套类型很有用,但不在公共成员中公开嵌套类型的使用。 如果嵌套类型和其外部类型之间的关系需要成员可访问性语义,则要使用嵌套类型。由于嵌套类型被视为是声明类型的成员,因此嵌套类型可以访问声明类型中的所有其他成员。 不要将公共嵌套类型用作逻辑分组构造;请改用命名空间。 避免公开显露嵌套类型。唯一的特例是需要声明嵌套类型的变量的情况,在生成子类或其他高级自定义等极少数情况下需要声明嵌套类型的变量。 如果可能在声明类型的外部引用类型,则不要使用嵌套类型。在常见方案中,不应要求对嵌套类型进行变量声明和对象实例化。例如,处理在某一类上定义的事件的事件处理程序委托不应嵌套在该类中。 如果需要由客户端代码实例化类型,则不要使用嵌套类型。如果某种类型具有公共构造函数,就可能不应进行嵌套。理想情况下,嵌套类型仅由它的声明类型进行实例化和使用。如果嵌套类型具有公共构造函数,则表示该类型不单由其声明类型使用。通常情况下,嵌套类型不应针对其声明类型以外的类型执行任务。如某种类型具有更广泛的用途,就很可能不应进行嵌套。 不要将嵌套类型定义为接口的成员。许多语言不支持这样的构造。 Java嵌套类示例packagechapter2; publicclassMyThread extendsThread { classSleepThread extendsThread { publicvoidrun() { try{ sleep(2000); } catch(Exception e) { } } } publicvoidrun() { while(true) System.out.println(newjava.util.Date().getTime()); } publicstaticvoidmain(String[] args) throwsException { MyThread thread = newMyThread(); SleepThread sleepThread = thread.newSleepThread(); sleepThread.start(); // 开始运行线程sleepThread sleepThread.join(); // 使线程sleepThread延迟2秒 thread.start(); booleanflag = false; while(true) { sleep(5000); // 使主线程延迟5秒 flag = !flag; if(flag) thread.suspend(); else thread.resume(); } } } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。