问题标签 [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.

0 投票
4 回答
1451 浏览

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 之外,您还有其他选择吗?

0 投票
6 回答
84834 浏览

java - 测试对象是否是参数类型的实例

有没有办法确定一个对象是否是泛型类型的实例?

这显然行不通。有替代方案吗?就像我想使用 Java 反射来实例化一个类,然后检查以确保它是 generic 类型T

0 投票
9 回答
26861 浏览

javascript - JavaScript 中 new String("x") 的意义何在?

做什么用例new String("already a string")

它的全部意义是什么?

0 投票
4 回答
277 浏览

java - 我的困惑:Java 中的反射

我刚刚读完关于类型信息和反射的“Thinking in Java”一章。虽然instanceof对我来说似乎很自然,但一些反思的例子让我感到困惑。我想知道反射是否广泛用于Java项目?反思的“好的部分”是什么?你能推荐一些有趣的关于反射和类型信息的讲座,并提供更多好的和有价值的例子吗?

编辑(另一个问题):

为什么使用 访问私有方法和字段很有用java.lang.reflect.Method.setAccesible()

提前致谢。

0 投票
5 回答
59372 浏览

java - 我怎样才能降低这个的循环复杂度?

我有一个接收对象并根据它检测到的对象类型执行某些操作的方法:

如何降低圈复杂度?我四处寻找,但找不到任何有用的东西。

0 投票
6 回答
6317 浏览

java - Java:检查泛型是否为 int

我想检查 Key 是否是 int,所以我将这些行放在构造函数中:

但是,我以这种方式创建了一个:

并且该死的 TypeOfKeyStillNotSupportedException() 弹出。为什么会发生这种情况,我该如何正确地做到这一点?

提前致谢。

编辑:已经发现问题在于键被分配为空。现在的问题是:如何进行检查?

0 投票
3 回答
3890 浏览

javascript - Javascript instanceof 究竟是如何工作的?是慢节奏吗?

instanceof“大图书馆”的公平表现如何?

它是否像这样一一地沿着原型链向上移动?:

与在instanceof每个对象的属性中存储唯一的接口 id 号相比,它的性能相对较差。

0 投票
1 回答
17210 浏览

javascript - 这个 instanceof 错误消息是什么意思?

我在 Chrome 中玩耍,instanceof但收到一条错误消息。我我知道为什么(您必须在instanceof创建对象的构造函数的关键字之后提供一个函数),但错误消息似乎在说明其他内容:

这是否意味着我应该[1,2,3]用一个函数替换?我认为这[1,2,3]是正确的,这[]就是问题所在,应该用函数替换,但看起来错误消息的意思是相反的。

有人可以解释我如何错误地解释错误消息吗?

0 投票
4 回答
7744 浏览

java - 实例不起作用?

我正在尝试创建一个实现 Collection 的类,因此它必须具有删除 的方法Object,所以我想我只是重用我已经创建的方法来删除泛型类型的对象T,但它会引发编译-时间错误。为什么这行不通?

代码


错误


为什么,爪哇?


我已经解决了

但是......我的意思是如果有人编码“ ArrayPP<String> a = new ArrayPP<String>();”,你知道那TString,对吧?那么为什么在运行时看不到是否o是 a String?我的意思是,如果我这样做a.add('c');,它不会编译,因为它知道,这里的add(T item)方法ArrayPP只会接受Strings,所以为什么......呃......

0 投票
8 回答
10162 浏览

java - 避免在 Java 中使用“instanceof”

我有以下(可能是常见的)问题,目前它绝对让我感到困惑:

有几个生成的事件对象扩展了抽象类Event,我想将它们划分为会话 Bean,例如

但是将来可能有两种以上的事件类型,所以 if-else 会很长并且可能不可读。此外,我认为instanceof在这种情况下并不是真正的“最佳实践”。

我可以向该类型添加一个抽象方法Event并让它们自行划分,但随后我必须在每个实体中注入特定的会话 Bean。

是否有任何提示可以为这个问题实现“漂亮”的解决方案?

谢谢你的帮助!