0

我们不能从 Java 的 Component 类中重写 size() 吗?

这是一个简单的类,myPanels 是一个在构造函数中已初始化的 ArrayList。

    /**
 * Returns number of panels
 */
@Override
public int size(){
    return myPanels.size();
}

错误读取:返回类型与 Component.size() 不兼容



编辑 - 解决方案

解决方案是选择不同的方法名称。使用了“size()”以外的东西

4

4 回答 4

3

如果您想找到一种方法来可靠地更改 GUI 组件的大小,那么您应该覆盖getPreferredSize()而不是处理大小或getSize(). 这样,您的组件将与大多数布局管理器配合使用。

否则,如果您使用此方法返回它所拥有的 ArrayList 的大小,而不是尝试设置组件的可视化大小,则为您的类提供一个方法来执行此操作,但不要将其命名getSize() 为混淆其他编码人员和编译器。而是命名它getMyPanelSize()或类似的东西。

于 2013-03-23T18:50:31.640 回答
0

假设您正在覆盖 java.awt.Component.size()

A: 自 Java 1.1 起已弃用,请改用 getSize()。

B:无论哪种方式,它都必须返回一个 Dimension

于 2013-03-23T18:43:58.503 回答
0

size() 必须返回 Dimension,自 1.1 起已弃用

我想你想覆盖 getSize() 吗?

在 Java 5.0 之前,当您覆盖一个方法时,参数和返回类型必须完全匹配。在 Java 5.0 中,它引入了一种称为协变返回类型的新工具。您可以覆盖具有相同签名的方法,但返回返回对象的子类。换句话说,子类中的方法可以返回一个对象,该对象的类型是该方法返回的类型的子类,在超类中具有相同的签名。

于 2013-03-23T18:45:01.870 回答
0

size()Component的方法返回一个类型的对象Dimension——这意味着你不能返回一个 int。

一种方法是将方法命名为其他名称,例如panelsSize(). 另一种是返回一个Dimension.

于 2013-03-23T18:45:33.913 回答