阻止从扩展类调用公共方法

时间:2013-08-01 13:51:06

标签: java swing

我创建了一个从JTextField扩展的自定义组件。我想阻止从我的组件调用getText()方法。这个问题有解决方案吗?

7 个答案:

答案 0 :(得分:4)

覆盖它,提供虚拟实现(或仅throw UnsupportedOperationException)并将其标记为@Deprecated

答案 1 :(得分:2)

覆盖它并在方法体中抛出UnsupportedOperationexception或者将其留空。

抛出异常将保证您永远不会使用此方法,因为否则您将获得异常并修复。

答案 2 :(得分:2)

在方法中抛出UnsupportedOperationException。在编译时无法禁止调用getText(),因此运行时异常是最佳选择。

此外,从文档的角度来看,清楚地说明(在Javadocs中,大概是)你的班级不支持getText()是明智的。这真的是你能给出的最好的警告 - 无论是谁在使用你的课程,确保他们在使用之前完全理解它是如何工作的,责任是什么。

答案 3 :(得分:2)

您可以使用UnsupportedOperationException

@Override
@Deprecated //will allow caller to see that calling this method should not be called
public void someMethod(){
    throw new UnsupportedOperationException("This method is not supported");

}

答案 4 :(得分:1)

使用虚拟实现覆盖它并添加提及Not to be used!的文档或从内部抛出异常。

答案 5 :(得分:1)

我不确定你想要做什么,但如果你想要的是当你调用getText时没有任何反应,只需覆盖它并让它返回空字符串或什么也不做。如果你解释一下你之后的更多内容,可能会有所帮助。

编辑:只需阅读您的评论,然后同时执行这两项操作。 @Override和@Deprecated:)

答案 6 :(得分:1)

无法阻止调用getText,因为您无法降低覆盖的可见性,因此您可以选择任何其他选项,例如返回null值或抛出UnsupportedOperationException之类的异常,在javadoc中解释,该方法正在做什么。 / p>

任何一个解决方案的问题是,如果您使用的是JTextField变量,您可能希望getText()方法返回其他内容

JTextField textField = new YourTextField();
textField.getText(); //--> might throw an UnsupportedOperationException instead of NullPointerException (as the javadoc says)