如果我们采用下面的代码:Shapep1=newSquare();Squarec1;if(p1instanceofSquare){c1=(Square)p1;}相比instanceof更喜欢多态是什么意思,顺便说一句,为什么它更好?编辑:我明白什么是多态;我缺少的是如何使用它而不是instanceof。 最佳答案 if...else...(或switch,或Visitor)与多态性之间的主要区别在于模块化。有所谓的开闭原则,基本上意味着,当你向现有程序添加新功能时,对现有代码所做的更改越少越好(因为每次更改都需要一些工作,并且可能会引
或者说获取类名或获取类型名这样可以在主要流行的网络容器/服务器上工作吗?谢谢。 最佳答案 ${foo.class.name}返回foo的完全限定名称。但是instanceof已经是你应该很少在设计良好的OO程序中使用的东西,它应该在JSPEL中使用得更少,在JSPEL中动态调用方法而不关心实际类型,最终目标应该只是生成标记。 关于java-如何在JSTL中实现"instanceOf",我们在StackOverflow上找到一个类似的问题: https://st
我有一个对象。我想检查它是否是枚举类型。有两种方法可以做到这一点。object.getClass().isEnum()或objectinstanceofEnum一个更好吗? 最佳答案 在我看来objectinstanceofEnum更好,原因如下:很明显这里问的是什么:“这是一个枚举吗”?它不会冒NullPointerException的风险(如果object是null,它只会评估为false)它更短。我认为使用isEnum()的唯一原因是我只能访问Class对象而不能访问具体实例。 关
我有一个接受对象的方法。在一个用例中,该方法接受HashMap并将每个值设置为相应键名的属性。publicvoidaddHelper(Objectobject){if(objectinstanceofHashMap){HashMaphashMap=(HashMap)object;this.foo=hashMap.get("foo");this.bar=hashMap.get("bar");}}此类遵循特定接口(interface),因此不能为这些属性添加setter。我的问题是,如何检查此处的类型转换?HashMaphashMap=(HashMap)object;提前致谢!解决方案感谢
我经常使用Eclipse的代码生成工具(Source/GeneratehashCode()和equals()...)为简单的POJO类创建equals()实现。如果我选择“Useinstanceoftocomparetypes”,这会产生一个类似这样的equals()实现:@Overridepublicbooleanequals(Objectobj){if(this==obj){returntrue;}if(obj==null){returnfalse;}if(!(objinstanceofMyClass)){returnfalse;}MyClassother=(MyClass)obj
看了各种文章,还是不明白为什么不能用instanceof。请让我知道您的想法。 最佳答案 我发现需要在糟糕的设计中使用instanceof提示。这是一个明确的迹象,表明一个大的、复杂的开关式结构将随之而来。大多数其他时候我看到它被使用,我们应该使用多态而不是instanceof。请参阅策略模式。(relevantexamplesofuse)我发现我唯一需要使用它的时候是在实现equals(Objecto)时。 关于java-什么时候应该和不应该使用instanceof?,我们在Stack
在任何人说什么之前,我只是出于好奇才问这个问题;我不打算根据这个答案进行任何过早的优化。我的问题是关于使用反射和转换的速度。标准说法是“反射很慢”。我的问题是到底是哪一部分慢,为什么?特别是在比较某事物是否是另一个实例的父实例时。我非常有信心将一个对象的类与另一个类对象进行比较与任何比较一样快,大概只是对已经存储在对象状态中的单例对象进行直接比较;但是如果一个类是另一个类的父类呢?我通常认为instanceof与常规类检查一样快,但今天我想到了它,似乎必须在instanceof的“幕后”发生一些反射(reflection)开始工作。上网查了一下,发现有几个地方有人说instanceof
我遇到了instanceof工作的问题,然后它不工作。进入细节是困难的,但我认为这可能是问题所在:正在阅读:http://www.theserverside.com/news/thread.tss?thread_id=40229(搜索Thread.currentThread),这似乎暗示,即使这两个对象是同一个类,如果你在具有不同类加载器的线程之间传递它们,instanceof(和isAssignableFrom)可能仍然会失败。这当然可以解释我的行为,但我想知道是否有人可以验证它?(我希望在讨论开始时链接的文章仍然可用,但它似乎不是。) 最佳答案
我有点困惑:我有一个函数,它接受一个对象作为参数。但是,如果我只是传递一个原语,甚至将boolean原语识别为boolean对象,编译器也不会提示。为什么呢?publicStringtest(Objectvalue){if(!(valueinstanceofBoolean))return"invalid";if(((Boolean)value).booleanValue()==true)return"yes";if(((Boolean)value).booleanValue()==false)return"no";return"dunno";}Stringresult=test(tru
我在大学的某个阶段被告知(并随后在很多地方阅读)使用instanceof应该只用作“最后的手段”。考虑到这一点,有谁能说出我拥有的以下代码是否是最后的手段。我四处查看了堆栈溢出,但找不到类似的情况-也许我错过了?privatevoidallocateUITweenManager(){for(GameObjectgo:mGameObjects){if(goinstanceofGameGroup)((GameGroup)go).setUITweenManager(mUITweenManager);}}在哪里mGameObjects是一个数组,只有部分是GameGroup类型GameGrou