问题标签 [instanceof]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
design-patterns - 替代实例?
我听说使用 instanceof 或等效项(http://www.javapractices.com/topic/TopicAction.do?Id=31,什么时候应该和不应该使用 instanceof ?)是不好的设计,我可以同意on,主要是因为它会使代码难以重用。
然而,在某些情况下,我发现很难找到一个好的替代 instanceof 的方法。例如,假设我想制作一款实时策略游戏。游戏由障碍物、建筑物和坦克组成,所有这些都放置在一个网格上,每个实体恰好占据网格中的一个单元。所以我创建了实体类,它是障碍、建筑和坦克类的超类。网格由实体的实例组成。在每次更新期间,我希望每辆坦克都能瞄准射程内的敌方坦克并射击。因此,一个简单的方法是让每个坦克向网格询问坦克范围内的所有实体,然后遍历所有这些实体并检查它们是否是 Tank 类的实例。
作为使用 instanceof 的替代方法,我唯一的尝试是使用设计模式Visitor。访问者被一个实体接受,该实体(entity->acceptVisitor(visitor))
又调用其中一种方法visitor->visitObstacle(this)
,visitor->visitBuildig(this)
或visitor->visitTank(this)
。然而,这迫使我创建了大量的访问者,对于我想在实体上进行的每一项任务几乎都有一个新的访问者。另一个问题是,在许多情况下,访问者在实体上调用相同的方法,无论它是从哪个类构造的。例如,当一个实体想要检查另一个实体是否静止时,可能会发生这种情况:
#Python代码:
当然,在这种情况下,我可以让实体直接询问另一个实体是否是静止的,而不是让访问者这样做。但在那种情况下,我在检查实体的属性时会不一致。让向实体询问某些属性的方法(直接或通过访问者)有所不同,这取决于我是否需要检查实体类型,在我看来,这似乎是一个非常奇怪的设计。
那么,除了在上述问题中使用 instanceof 之外,您还有其他选择吗?
java - 测试对象是否是参数类型的实例
有没有办法确定一个对象是否是泛型类型的实例?
这显然行不通。有替代方案吗?就像我想使用 Java 反射来实例化一个类,然后检查以确保它是 generic 类型T
。
javascript - JavaScript 中 new String("x") 的意义何在?
做什么用例new String("already a string")
?
它的全部意义是什么?
java - 我的困惑:Java 中的反射
我刚刚读完关于类型信息和反射的“Thinking in Java”一章。虽然instanceof
对我来说似乎很自然,但一些反思的例子让我感到困惑。我想知道反射是否广泛用于Java项目?反思的“好的部分”是什么?你能推荐一些有趣的关于反射和类型信息的讲座,并提供更多好的和有价值的例子吗?
编辑(另一个问题):
为什么使用 访问私有方法和字段很有用java.lang.reflect.Method.setAccesible()
?
提前致谢。
java - 我怎样才能降低这个的循环复杂度?
我有一个接收对象并根据它检测到的对象类型执行某些操作的方法:
如何降低圈复杂度?我四处寻找,但找不到任何有用的东西。
java - Java:检查泛型是否为 int
我想检查 Key 是否是 int,所以我将这些行放在构造函数中:
但是,我以这种方式创建了一个:
并且该死的 TypeOfKeyStillNotSupportedException() 弹出。为什么会发生这种情况,我该如何正确地做到这一点?
提前致谢。
编辑:已经发现问题在于键被分配为空。现在的问题是:如何进行检查?
javascript - Javascript instanceof 究竟是如何工作的?是慢节奏吗?
instanceof
“大图书馆”的公平表现如何?
它是否像这样一一地沿着原型链向上移动?:
与在instanceof
每个对象的属性中存储唯一的接口 id 号相比,它的性能相对较差。
javascript - 这个 instanceof 错误消息是什么意思?
我在 Chrome 中玩耍,instanceof
但收到一条错误消息。我想我知道为什么(您必须在instanceof
创建对象的构造函数的关键字之后提供一个函数),但错误消息似乎在说明其他内容:
这是否意味着我应该[1,2,3]
用一个函数替换?我认为这[1,2,3]
是正确的,这[]
就是问题所在,应该用函数替换,但看起来错误消息的意思是相反的。
有人可以解释我如何错误地解释错误消息吗?
java - 实例不起作用?
我正在尝试创建一个实现 Collection 的类,因此它必须具有删除 的方法Object
,所以我想我只是重用我已经创建的方法来删除泛型类型的对象T
,但它会引发编译-时间错误。为什么这行不通?
代码
错误
为什么,爪哇?
我已经解决了
但是......我的意思是如果有人编码“ ArrayPP<String> a = new ArrayPP<String>();
”,你知道那T
是String
,对吧?那么为什么在运行时看不到是否o
是 a String
?我的意思是,如果我这样做a.add('c');
,它不会编译,因为它知道,这里的add(T item)
方法ArrayPP
只会接受String
s,所以为什么......呃......
java - 避免在 Java 中使用“instanceof”
我有以下(可能是常见的)问题,目前它绝对让我感到困惑:
有几个生成的事件对象扩展了抽象类Event
,我想将它们划分为会话 Bean,例如
但是将来可能有两种以上的事件类型,所以 if-else 会很长并且可能不可读。此外,我认为instanceof
在这种情况下并不是真正的“最佳实践”。
我可以向该类型添加一个抽象方法Event
并让它们自行划分,但随后我必须在每个实体中注入特定的会话 Bean。
是否有任何提示可以为这个问题实现“漂亮”的解决方案?
谢谢你的帮助!