以下编译正常:
Object o = new Object();
System.out.println(o instanceof Cloneable);
Run Code Online (Sandbox Code Playgroud)
但这不是:
String s = new String();
System.out.println(s instanceof Cloneable);
Run Code Online (Sandbox Code Playgroud)
抛出编译器错误.
问题是什么?
当我编译并运行此代码时:
public class Testing {
public static void main(String... args) {
Object obj = null;
if (obj instanceof Object) {
System.out.println("returned true");
} else {
System.out.println("returned false");
}
System.out.println(" " + obj instanceof Object);
}
}
Run Code Online (Sandbox Code Playgroud)
我在命令行上看到了这个:
C:\Users\xxxxxx\Desktop>java Testing
returned false
true
Run Code Online (Sandbox Code Playgroud)
不应该"null instanceof someType"总是返回false?
在我的DateTime类中,这是检查对象是否是类的实例的唯一方法吗?
$cls = ReflectionClass("DateTime");
if (! $cls->isInstance( (object) $var ) ) {
// is not an instance
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有点沉重.
我有一个课程Child延伸Parent.
Parent child = new Child();
if (child instanceof Parent){
// Do something
}
Run Code Online (Sandbox Code Playgroud)
这会返回true还是false,为什么?
在我自己的一些旧代码中,我使用以下代码:
Object.prototype.instanceOf = function( iface )
{
return iface.prototype.isPrototypeOf( this );
};
Run Code Online (Sandbox Code Playgroud)
然后我做(例如)
[].instanceOf( Array )
Run Code Online (Sandbox Code Playgroud)
这有效,但似乎以下情况也是如此:
[] instanceof Array
Run Code Online (Sandbox Code Playgroud)
现在,这肯定只是一个非常简单的例子.因此,我的问题是:
是否a instanceof b 总是一样的b.prototype.isPrototypeOf(a)?
instanceof可用于测试对象是否是给定类的直接或下降实例.instanceof即使接口无法像类一样实例化,也可以与接口一起使用.任何人都可以解释一下instanceof有效
我正在用GDB调试一个C++程序.
我有一个指向某个类的对象的指针.指针被声明为某些超类,它由几个子类扩展.
对象中没有字段指定此对象的精确类类型,但是定义了一些虚函数(例如bool is_xxx())以在运行时告知类类型.
有没有办法在不调用这些虚函数的情况下告诉GDB中对象的精确类类型.当程序是多线程的时,在GDB中调用这些函数可能会产生令人困惑的结果.
在NodeJS和V8中有没有办法有效地检查变量是Object还是Array?
我正在为MongoDB和NodeJS编写一个Model,并遍历对象树,我需要知道对象是简单的(Number,String,...)还是复合(Hash,Array).
似乎V8有快速内置Array.isArray,但如何检查对象是否是一个对象?我的意思是复杂的对象,如哈希{}或类的实例,不是这样的new String()?
通常它可以这样做:
Object.prototype.toString.call(object) == "[object Object]"
Run Code Online (Sandbox Code Playgroud)
或这个:
object === Object(object)
Run Code Online (Sandbox Code Playgroud)
但似乎这种操作并不便宜,也许有一些效率更高?如果它不是通用的并且不适用于所有引擎,那就没关系,我只需要在V8上工作.
对于这个例子:
public class Foo{}
public class Bar extends Foo{}
....
void myMethod(Foo qux){
if (checkInstance(qux,Foo.class)){
....
}
}
Run Code Online (Sandbox Code Playgroud)
如何检查是否qux是Foo的实例(但不是foo的子类的实例)?那是:
instanceof这张支票有什么样的陈述吗?或者我应该使用qux.getClass().equals(Foo.class)
我正在尝试实现我的第一个工厂设计模式,我不确定在将工厂制造的对象添加到列表时如何避免使用instanceof.这就是我想要做的:
for (ABluePrint bp : bluePrints) {
AVehicle v = AVehicleFactory.buildVehicle(bp);
allVehicles.add(v);
// Can I accomplish this without using 'instanceof'?
if (v instanceof ACar) {
cars.add((ACar) v);
} else if (v instanceof ABoat) {
boats.add((ABoat) v);
} else if (v instanceof APlane) {
planes.add((APlane) v);
}
}
Run Code Online (Sandbox Code Playgroud)
从我在SO上看到的,使用'instanceof'是代码气味.有没有更好的方法来检查工厂创建的车辆类型而不使用'instanceof'?
我欢迎任何关于我的实施的反馈/建议,因为我不确定我是否正确地采用了这种方式.
完整示例如下:
import java.util.ArrayList;
class VehicleManager {
public static void main(String[] args) {
ArrayList<ABluePrint> bluePrints = new ArrayList<ABluePrint>();
ArrayList<AVehicle> allVehicles = new ArrayList<AVehicle>();
ArrayList<ACar> cars = new ArrayList<ACar>();
ArrayList<ABoat> boats = new …Run Code Online (Sandbox Code Playgroud) instanceof ×10
java ×6
inheritance ×2
javascript ×2
c++ ×1
class ×1
cloneable ×1
factory ×1
gdb ×1
instance ×1
interface ×1
isinstance ×1
node.js ×1
oop ×1
php ×1
polymorphism ×1
prototype ×1
superclass ×1
typeof ×1
types ×1
v8 ×1