import javax.swing.*;
class Foo{
public static void main(String args[]){
JFrame f=new JFrame();
f.add("North",new JButton()); //Line 1
f.add(new JButton(),"North"); //Line 2
f.setVisible(true);
}
}
swing API声明JFrame类包含5个名称为add的方法,继承自java.awt.Container,另一个add方法继承自java.awt.Component。
**Their signatures are as follows:**
*Inherited from java.awt.Container*
add(Component)
add(Component,int)
add(Component,Object)
add(Component,Object,int)
add(String,Component)
*Inherited from java.awt.Component*
add(java.awt.PopupMenu)
我期望在API中会有两个带有签名的重载方法add(Component,String)和add(String,Component)。但看到情况并非如此,我假设第1行调用add(String,Component),第2行调用add(Component,Object)。
此外,任何人都可以给我一个关于如何实现调用方法的解释。我试图通过查看API的来源来解决这个问题,但是方法调用链就像一个迷宫,我可以使用之前曾经去过那里的人的指导。
答案 0 :(得分:5)
最后,他们都致电Container#addImpl(Component, Object, int)
,期待add(PopupMenu)
add(Component)
来电addImpl(comp, null, -1)
add(String, Component)
来电addImpl(comp, name, -1)
add(Component, int)
来电addImpl(comp, null, index)
add(Component, Object)
来电addImpl(comp, constraints, -1)
add(Component, Object, int)
来电addImpl(comp, constraints, index)
addImpl
做了很多工作......
确保;
Window
(因为您无法向组件添加窗口)index
> -1)然后......
addNotify
方法(如果容器在屏幕上实现)componentAdded
)和层次结构事件(hierarchyChanged
)额外
“添加”方法是装饰器。它们提供了许多可以过滤到单个方法的入口方法,旨在根据工作环境使开发人员的生活更简单。