Tag: instanceof

带抽象参数和inheritance的Java抽象方法

我最近遇到了一个API和一个实现的问题,其中出现了以下类型的代码: API是一个抽象类: public abstract class A { public A sum(A a) { System.out.println(“A.sum(A) called”); return null; } } 实现是一个简单的类: public class B extends A { public B sum(B b) { System.out.println(“B.sum(B) called”); return null; } } 说到使用它我写道: public class Main { public static void main(String args[]) { B b = new B(); A basa = […]

Java:未选中从X转换为Y /如何实现castOrNull

我已经实现了这个function: static Y castOrNull(X obj) { try { return (Y)obj; } catch(ClassCastException e) { return null; } } 这给了我编译器警告: Type safety: Unchecked cast from X to Y 我不太明白。 不是我在这里做的try/catch检查吗? 我可以忽略这个警告吗? 我的function是否会按预期工作? 我该如何正确实现它? 我也尝试使用obj instanceof Y检查的obj instanceof Y但由于Java处理generics的方式,这不起作用。 顺便说一句,这个函数对我来说似乎非常有用(使其他代码更干净)。 我想知道Java中是否已存在这样的函数? 我想要使​​用它的一个例子: void removeEmptyRawStrings() { for(Iterator e = entities.iterator(); e.hasNext();) { RawString s = castOrNull(e.next()); if(s != […]

Java .equals()instanceof子类? 为什么不调用超类等于而不是最终?

它在Object的.equals(Object) javadoc中声明: 它是对称的:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true。 在示例代码中几乎无处不在,我看到重写的.equals(Object)方法,它使用instanceof作为第一个测试之一,例如: 在重写equals和hashCode时必须考虑哪些问题/陷阱? public class Person { private String name; private int age; public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; if (!(obj instanceof Person)) return false; … } } 现在使用class SpecialPerson extends Person equals : if (!(obj instanceof SpecialPerson)) return false; 我们不保证.equals()是对称的。 例如,这里已经讨论过: […]

reflection:在不使用instanceof的情况下将对象强制转换为子类

我有这个简单的接口/类: public abstract class Message {} public class Message1 extends Message {} public class Message2 extends Message {} 实用类: public class Utility { public void handler(Message m) { System.out.println(“Interface: Message”); } public void handler(Message1 m) { System.out.println(“Class: Message1”); } public void handler(Message2 m) { System.out.println(“Class: Message2”); } } 现在,主要类: public static void main(String[] args) { […]

Java – 是否有像instanceof这样的“子类”?

我重写了equals()方法,我需要知道对象是否是Event的子类的实例(Event是超类)。 我想要像“obj subclassof Event”这样的东西。 怎么做到这一点? 提前致谢!

Java中的instanceof – 为什么不编译?

class A { public static void main(String…args) { Integer var = 10; if(var instanceof Character) // Line1 System.out.println(“var is a Character”); } } 我知道第1行不会编译,因为编译器发现var不是一个Character 。 我无法理解的是编译器抛出错误而不是返回false或true 。 如果编译器返回false或true (即将instanceof操作视为常规的基于if的validation),那么它会更有用..它不会吗? 还是我错过了一些明显的东西?

如何实现与hibernate相等而不会失去对称属性的风险?

在阅读之后(再次,应该已经做了很久以前)正确实现了equals和hashcode我得出了这些结论,这对我有用: 如果在JDK 7之前 :首选使用Apache commons equalsbuilder和hashcodebuilder。 (或番石榴)。 他们的javadoc包含如何以良好的方式使用它们的示例。 如果是JDK 7 ++ :使用新的Objects实用程序类 但是,如果为hibernate写一些特殊的请求出现(参见更远的源代码)其中推荐使用instanceof而不是getClass ,因为hibernate创建了延迟加载的子类的代理。 但据我所知,如果这样做,另一个潜在的问题就出现了:使用getClass的原因是为了确保equals合约的对称属性。 JavaDoc中: *It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.* 通过使用instanceof,它可能不是对称的。 示例:B扩展A. A的等于A的检查实例.B的等于B的实例检查。给A a和B b: a.equals(b) – > true b.equals(a) – > false 如何实现与hibernate相等而不会失去对称属性的风险? 使用getClass时我似乎不安全,使用instanceof时我不安全? 答案是永远不要将重要成员添加到子类,然后使用instanceof是安全的(对于hibernate)? 我读到的消息来源: […]

为什么instanceof不能使用Generic?

可能重复: Java:Instanceof和Generics 我正在尝试编写一个将通用List转换为特定类型List的函数。 找到下面的代码 public List castCollection(List srcList, Class clas){ List list =new ArrayList(); for (Object obj : srcList) { if(obj instanceof T){ … } } return list; } 但是obj instanceof T显示编译错误 – 无法对类型参数T执行instanceof检查。请改为使用其擦除对象>,因为将在运行时擦除其他generics类型信息。 任何澄清或获得预期结果的方法? 提前致谢。 🙂

Java:如何检查对象是否是非静态内部类的实例,而不管外部对象是什么?

如果我有一个内部阶级,例如 class Outer{ class Inner{} } 有没有办法检查任意Object是否是任何Inner的实例,无论其外部对象是什么? 当对象不是来自同一Outer Inner时, instanceof给出false。 我知道一个解决方法就是让Inner成为一个静态类,但我想知道我问的是否可行。 例: class Outer{ Inner inner = new Inner(); class Inner{} public boolean isInner(Object o){ return o instanceof Inner; } } Outer outer1 = new Outer(); Outer outer2 = new Outer(); boolean answer = outer1.isInner(outer2.inner); //gives false

如何创建一个我无法更改的类,实现一个接口?

我有一个来自另一个闭源的库的类,但我希望能够使用它的接口。 原因是我不想在任何地方进行instanceof检查或null -checks,但我也不想扩展现有的类。 例如,假设我有这个代码: public class Example { // QuietFoo is from another library that I can’t change private static QuietFoo quietFoo; // LoudFoo is my own code and is meant to replace QuietFoo private static LoudFoo loudFoo; public static void main(String[] args) { handle(foo); } private static void handle(Object foo) { if (foo instanceof […]