1

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

4

7 回答 7

4

覆盖它,提供一个虚拟实现(或只是throw UnsupportedOperationException)并将其标记为@Deprecated.

于 2013-08-01T13:54:07.273 回答
2

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

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

于 2013-08-01T13:54:11.523 回答
2

在方法中抛出一个UnsupportedOperationException。没有办法禁止getText()在编译时调用,所以运行时异常是最好的选择。

此外,从文档的角度来看,明确说明(大概在 Javadocs 中)getText()您的类不支持的内容是明智的。这确实是你能给出的最好的警告——任何使用你的类的人都有责任确保他们在使用它之前完全理解它是如何工作的。

于 2013-08-01T13:54:21.757 回答
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");

}
于 2013-08-01T13:58:51.773 回答
1

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

于 2013-08-01T13:53:10.733 回答
1

我不确定您要做什么,但是如果您想要的是在调用 getText 时什么都没有发生,只需覆盖它并使其返回空字符串或什么都不返回。如果您多解释一下您的目标可能会有所帮助。

编辑:只需阅读您的评论,然后两者都做。@Override 和 @Deprecated :)

于 2013-08-01T13:54:04.773 回答
1

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

这两种解决方案的问题是,如果您使用的是 JTextField 变量,您可能期望 getText() 方法返回其他内容

JTextField textField = new YourTextField();
textField.getText(); //--> might throw an UnsupportedOperationException instead of NullPointerException (as the javadoc says)
于 2013-08-01T14:11:16.247 回答