多年来,我尽力避免instanceof.在适用的地方使用多态或访问者模式.我认为在某些情况下它只是简化了维护...是否还有其他一些应该注意的缺点?
但我确实在Java库中看到它,所以我认为它有它的位置?在什么情况下更可取?难道不可避免吗?
正如我一直都理解的那样,一个instanceof合适的主要案例是:
Object.equals(Object).因此,如果我正在编写一个List类,而不是AbstractList出于任何原因进行扩展,我将equals(o)通过首先测试o instanceof List,然后比较元素来实现.Collections.binarySearch进行instanceof RandomAccess测试,并使用稍微不同的二进制搜索RandomAccess和非RandomAccess列表.instanceof在这两种情况下,我认为不代表代码气味.但是有没有其他情况下使用它是明智的instanceof?
我正在用 Rust 制作一个 OOP 聊天客户端。模块 messages.rs 创建并处理发送到其他模块的消息作为 structs:SimpleMessage和ComplexMessagestructs:
//! # Messages
use time::SteadyTime;
/// Represents a simple text message
pub struct SimpleMessage<'a> {
pub user: ...
pub time: &'a SteadyTime<'a>,
pub content: &'a str,
}
/// Represents attachments, like text or multimedia files.
pub struct ComplexMessage<'a> {
pub user: ...
pub time: &'a SteadyTime<'a>,
//pub content: PENDING
}
impl<'a> SimpleMessage<'a> { }
impl<'a> ComplexMessage<'a> { }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn is_simple() { …Run Code Online (Sandbox Code Playgroud)