API要有运行时的类库、javadoc、指导教程。最重要的是,这些内容必须保持一致性。不能有的说某个功能可以实现,有的说某个功能不能实现。
要保证开发者编写代码时输入时和运行时都正确。IDE实现了半自动化编码,来保证输入时正确。
举个开发时和运行时不一致的例子。javax.swing.JFrame是java.awt.Component的子类。因此,所有可以使用java.awt.Component对象的地方,理论上讲都可以用javax.swing.JFrame,比如说把JFrame控件放到一个java.awt.Container控件容器中。很明显,这是行不通的,不可能把一个顶层的窗口放到一个对话框中。但是代码编译可以通过。对于有经验的人,是不会犯这种错误的,但是对于初学者来说,Swing类库在开发时和运行时的不一致性,却会打击他们使用Swing的积极性。
这种设计和运行时不一致的例子估计俯仰皆是。这也是没有办法的事情,因为代码运行时所表现的计算能力就像一台图灵机。事实上常用的编程语言都有自己的类型,并不完全遵守图灵理论,所以编程语言无法正确表达所有运行时的内容。不可能消除所有的不同,所以一旦出现这种问题,只能说是运气不好了。但对于出现的问题,API的用户需要了解设计和运行的区别,要找到在程序运行时出现的非预期问题。如果想让用户再不了解API内幕的时候也能很好地开发代码,就必须将这种设计和运行的不一致最小化。