Java 为什么cardlayout键作为对象传递?

Java 为什么cardlayout键作为对象传递?,java,swing,enums,cardlayout,Java,Swing,Enums,Cardlayout,java.awt.CardLayout.addLayoutComponent(组件组件、对象约束) 来自docs.oracle的“约束指定的对象必须是字符串” 那么,如果对象必须是字符串,为什么该方法将对象作为参数?这个问题一直困扰着我,因为它让我希望有一种简单的方法可以将枚举用作cardlayout的键 public class MainWindow extends JPanel { private CardLayout cards = new CardLayout(); public M

java.awt.CardLayout.addLayoutComponent(组件组件、对象约束)

来自docs.oracle的“约束指定的对象必须是字符串”

那么,如果对象必须是字符串,为什么该方法将对象作为参数?这个问题一直困扰着我,因为它让我希望有一种简单的方法可以将枚举用作cardlayout的键

public class MainWindow extends JPanel {

private CardLayout cards = new CardLayout();

public MainWindow() {
    setLayout(cards);
    cards.addLayoutComponent(new FirstComp(), MyEnum.LONG_ANNOYING_NAME_ONE);
    cards.addLayoutComponent(new SecondComp(), MyEnum.LONG_ANNOYING_NAME_TWO);
    cards.addLayoutComponent(new ThirdComp(), MyEnum.LONG_ANNOYING_NAME_THREE);
    /**
     * notice no .toString() call on enums. Is there a way to define my
     * enum class so that this functionality is possible?
     **/
}

public void showMethod(MyEnum show) {
    cards.show(this, MyEnum);
}
}


LayoutManager2定义addLayoutComponent(组件、对象)。第二个参数是Object,因为不同的布局管理器可以支持不同类型的约束。CardLayout实现LayoutManager2,因此它必须实现定义的方法。

因为javadoc声明约束对象必须是字符串

但是,没有什么可以阻止您扩展CardLayout,并按照您希望的方式重新实现该方法:

public class MyCardLayout extends CardLayout {

    @overrive
    public void addLayoutComponent(Component comp, Object constraints) {

       if  (constraints != null) {
         super.addLayoutComponent(comp, constraints.toString());
       } else {
         super.addLayoutComponent(comp, constraints);
       }
    }
}
public class MyCardLayout extends CardLayout {

    @overrive
    public void addLayoutComponent(Component comp, Object constraints) {

       if  (constraints != null) {
         super.addLayoutComponent(comp, constraints.toString());
       } else {
         super.addLayoutComponent(comp, constraints);
       }
    }
}