Tag: instanceof

“instanceof Void”总是返回false吗?

这种方法能以某种方式返回true吗? public static boolean isVoid(T t) { return t instanceof Void; }

在Threads之间传递对象时是否可以使用instanceof?

我遇到了一个问题,其中instanceof工作,然后它没有。 进入细节很困难,但我认为这可能是问题所在: 阅读本文: http : //www.theserverside.com/news/thread.tss? thread_id = 40229(搜索Thread.currentThread),似乎暗示即使两个对象是同一个类,如果你传递它们在具有不同类加载器的线程之间,instanceof(和isAssignableFrom)可能仍会失败。 这当然可以解释我的行为,但我想知道是否有人可以validation它? (我希望在讨论开始时链接的文章仍然可用,但它似乎不是。)

将类作为参数传递给java中的方法

我正在编写一个方法,我想将一个类传递给一个方法,其中一部分代码包括检查对象是否属于某种类型。 这就是我想要的(但显然不起作用): private static class MyClass1 { /***/ } private static class MyClass2 { /***/ } private void someFunc() { /* some code */ methodName(MyClass1); methodName(MyClass2); } private void methodName(Class myClass) { Object obj; /* Complicated code to find obj in datastructure */ if (obj instanceof myClass) { /* Do stuff */ } } 有关如何做到这一点的任何提示? […]

经常使用instanceof是一种好习惯吗?

场景。 我正在写与游戏相关的代码。 在那个游戏中, Player (它也是一个类)有一个Item列表。 还有其他类型的项从Iteminheritance,例如ContainerItem , DurableItem或WeaponItem 。 显然,只有List对我来说非常方便。 但是当我获得玩家物品时,我唯一的方法就是通过使用instanceof关键字来区分什么类型的物品。 我敢肯定我已经读过,依赖它是不好的做法。 在这种情况下可以使用它吗? 或者我应该重新考虑我的所有结构?

Java:instanceof Generic

有没有办法找到generics的类型? if (T instanceof String) { // do something… } 以上绝对不会编译。

当用于2个不兼容的类时,为什么`instanceof`错误而不是返回`false`?

我正在读这个: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.20.2 他们说: 考虑示例程序: class Point { int x, y; } class Element { int atomicNumber; } class Test { public static void main(String[] args) { Point p = new Point(); Element e = new Element(); if (e instanceof Point) { // compile-time error System.out.println(“I get your point!”); p = (Point)e; // compile-time error } […]

java中的instanceof运算符用于比较不同的类

我试图看看Java中的instanceof运算符是如何工作的,并且面临着一个非常奇怪的问题。 public static void main(String[] args) { Map m = new HashMap(); System.out.println(“m instanceof Date: ” + (m instanceof Date)); } 以上内容按预期返回false。 然而, public static void main(String[] args) { HashMap m = new HashMap(); System.out.println(“m instanceof Date: ” + (m instanceof Date)); } 这甚至都没有编译。 我收到一个错误 inconvertible types found : java.util.HashMap required : java.util.Date 我在这里想念的是什么? 我正在使用IntelliJ […]

检查对象是否是类的实例(但不是其子类的实例)

对于这个例子: public class Foo{} public class Bar extends Foo{} …. void myMethod(Foo qux){ if (checkInstance(qux,Foo.class)){ …. } } 如何检查qux是否是Foo的实例(但不是foo的子类的实例)? 那是: checkInstance(qux,让Foo.class)=真 checkInstance(qux,Bar.class)=假 这种检查有像instanceof这样的语句吗? 或者我应该使用qux.getClass().equals(Foo.class)

切换java中的类型

在开始之前,我知道这个问题有很多答案可以提出替代方法。 我正在寻求对这种特殊方法的帮助,以确定是否可行,如果不可能,可能有效的类似方法。 我有一个方法,它接受一个超类,并根据传递的对象的类型调用一个方法。 例如: public void handle(Object o){ if (o instanceof A) handleA((A)o); else if (o instanceof B) handleB((B)o); else if (o instanceof C) handleC((C)o); else handleUnknown(o); 我不能修改子类型来覆盖handle()方法,正如这个答案所暗示的那样,因为我不拥有这些类。 所以我的方法就是instanceof 。 我想使用switch语句而不是if/else ,因为它更整洁。 我知道你只能打开基元和字符串,所以我要切换类名: switch(o.getClass().getCanonicalName()){ case “my.package.A”: handleA((A)o); break; case “my.package.B”: handleB((B)o); break; case “my.package.C”: handleC((C)o); break; default: handleUnknown(o); break; } 这里的问题是规范名称非常长(如12个子包),我不能在case语句中调用ClassName.class.getCanonicalName() ,因为Java不允许这样做。 所以我的下一个解决方案是Enum。 这是我遇到问题的地方。 我希望我的代码看起来像这样: […]

Java instanceof运算符

是否有一个可以与instanceof运算符一起使用的有效类Type变量? 例如: String s = “abc”; Class classType = String.class; if (s instanceof classType) { //do something } 作为替代方案: if (s.getClass() == classType) { //do something } 是否会有任何性能优势?