如果我有一个需要实现接口的类,但该接口上的一个或多个方法在这个特定类的上下文中没有意义,我该怎么办?
例如,假设我正在实现一个适配器模式,我想通过包装一些不可变对象并将其数据作为键/值对公开来创建一个实现java.util.Map的包装类.在这种情况下,put和putAll方法没有意义,因为我无法修改底层对象.所以问题是这些方法应该做什么?
任何无法根据接口的语义实现的方法都应该抛出UnsupportedOperationException.
这取决于您的商业案例.2个选项:
没做什么.
扔一个UnsupportedOperationException
.
使用哪个更有意义.如果你什么也不做,你就不遵守接口的合同.但是,抛出运行时异常会对调用代码造成严重破坏.因此,必须根据您将如何使用该课程做出决定.如果可能,另一种选择是使用更简单或不同的界面.
请注意,Java库在只读集合的特定情况下是异常路由.
NotImplementedException
,或者如果你已经在使用公共语言,你可以使用他们的.
Java提供的只读集合在写入操作期间抛出UnsupportedOperationException已经是一个不幸的设计攻击.集合类应该使用单独的只读和只写接口编写,这些接口都由完整的读写接口继承.然后你知道你得到了什么.