标签: instanceof

在Javascript中检查对象是否为数组的最佳方法是什么?

说我有这样的功能:

function foo(bar) {
    if (bar > 1) {
       return [1,2,3];
    } else {
       return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

并说我打电话foo(1),我怎么知道它返回一个数组?

javascript arrays typeof instanceof

6
推荐指数
1
解决办法
1301
查看次数

为什么这个instanceof代码工作并且不会导致编译时错误?

在下面的代码中,x的类型是I(虽然x也实现了J但在编译时不知道),为什么(1)处的代码不会导致编译时错误.因为在编译时只考虑引用的类型.

public class MyClass {
    public static void main(String[] args) {
        I x = new D();
        if (x instanceof J) //(1)
            System.out.println("J");
    }
}

interface I {}

interface J {}

class C implements I {}

class D extends C implements J {}
Run Code Online (Sandbox Code Playgroud)

java instanceof

6
推荐指数
1
解决办法
4059
查看次数

java:组合instanceof和cast?

(请不要告诉我应该抽象X更多并添加另一种方法.)

在C++中,当我有一个x类型的变量,X*并且我想要做一些特定的事情,如果它也是类型Y*(Y作为其子类X),我写这个:

if(Y* y = dynamic_cast<Y*>(x)) {
    // now do sth with y
}
Run Code Online (Sandbox Code Playgroud)

在Java中似乎不可能做同样的事情(或者是吗?).

我已经阅读了这个Java代码:

if(x instanceof Y) {
    Y y = (Y) x;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

有时,当你没有变量x但是它是一个更复杂的表达式时,正是因为这个问题,你需要在Java中使用一个虚拟变量:

X x = something();
if(x instanceof Y) {
    Y y = (Y) x;
    // ...
}
// x not needed here anymore
Run Code Online (Sandbox Code Playgroud)

(常见的是,something()iterator.next().还有你看,你也不能真正称之为两次即可.你真的需要虚拟变量.)

x在这里你根本不需要- 你只是拥有它,因为你不能instanceof立即用演员表进行检查.再次将它与相当常见的C++代码进行比较:

if(Y* y = dynamic_cast<Y*>( something() …
Run Code Online (Sandbox Code Playgroud)

java dynamic-cast casting instanceof

6
推荐指数
3
解决办法
9737
查看次数

为包装类操作PHP-instanceof-operator

我想为某些类设置一个通用的包装类来拦截和操作一些方法调用.方法 - 呼叫转发,拦截,到目前为止没问题.但是经过一段时间的思考,我发现了一个问题,我没有解决方案:我在我的应用程序中使用内置的instanceof-operator.当然这将不再起作用,因为包装器不是其中类的实例.我想继续使用运算符,而不是用其他函数替换它.

有没有办法实现此问题的解决方法?这个操作符如何工作?它是否调用了我可能在包装器中覆盖的类的核心功能?

我知道这不是一个真正"干净"的解决方案来操纵这个操作符,但我认为这对我来说是最简单的解决方案.而且正如我们所知,PHP中有很多东西并不那么干净...... :-)

谢谢你的回答,本

php aop instanceof decorator interceptor

6
推荐指数
1
解决办法
428
查看次数

检查ArrayList以获取对象的实例

我有一个java方法,应该检查ArrayList并检查它是否包含给定类的实例.我需要传递方法类型的类来检查作为参数,如果List包含给定类型的对象,则返回它.

这可以实现吗?

java arraylist instanceof

6
推荐指数
2
解决办法
2万
查看次数

为什么"t instanceof T"不允许,其中T是类型参数,t是变量?

Eclipse表示,由于泛型橡皮擦,Type Parameter不允许使用instanceof操作.

我同意在运行时,不会保留类型信息.但请考虑以下类的通用声明:

class SomeClass<T>{
    T t;
    SomeClass(Object o){
        System.out.println(o instanceof T);   // Illegal
    }   
}        
Run Code Online (Sandbox Code Playgroud)

在运行时,不会出现T!但是如果我实例化这个类型为Integer的类,那么相应的对象将具有Integer类型的字段t.

那么,为什么我不能用T检查变量的类型,它可以在运行时被Integer替换.而我实际上会做类似"o instanceof Integer"的事情.

在哪些情况下,允许带有类型参数的instanceof会导致故障,从而禁止它?

java generics instanceof type-parameter

6
推荐指数
3
解决办法
5292
查看次数

Java中RTTI与反射的区别

我的问题是在运行时如何加载类信息?

有人打电话时instanceof是考虑RTTI还是反思?还是取决于实际情况?

java reflection terminology instanceof rtti

6
推荐指数
1
解决办法
8238
查看次数

一个ArrayList中的多个对象类型

我有一个名为User的抽象类,用户可以创建为学生类型或教师类型.我已经创建了一个用户(学生和教师)的ArrayList,我想要做的是调用一个方法示例,具体取决于当前对象是什么的实例:

for (User user : listOfUsers) {

  String name = user.getName();

  if (user instanceof Student) {

    // call getGrade();

  } else { // it is an instance of a Teacher

    // call getSubject();
  }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是因为它是User对象的ArrayList,它无法获取Student类型方法,例如getGrade().但是,因为我能够确定当前用户的实例是什么,所以我很好奇是否仍然可以根据用户的类型调用特定方法.

这是可能的,还是我必须将用户类型分成单独的列表?

请尽快回复,非常感谢.

java abstract-class arraylist instanceof abstract

6
推荐指数
2
解决办法
1093
查看次数

在Java中处理具体类型时的替代方法

假设我有以下类层次结构:

public interface Result {
}
public class Failure implements Result {
    private String msg;
    public Failure(String msg) {
        this.msg = msg;
    }
    @Override public String toString() { return msg; }
}
public class Success implements Result {
    private int time, count;
    public Success(int time, int count) { this.time = time; this.count = count; }
    public int getTime() { return time; }
    public int getCount() { return count; }
    @Override public String toString() { return time + ", " + …
Run Code Online (Sandbox Code Playgroud)

java inheritance instanceof

6
推荐指数
1
解决办法
533
查看次数

TypeScript instanceof无法正常工作

我在使用instanceof运算符时遇到问题,但它似乎不起作用.这是我的代码的一部分:

        const results = _.map(items, function(item: Goal|Note|Task, index: number) { 
            let result = {};
            if (item instanceof Goal) {
                result = { id: index, title: item.name };
            } else if (item instanceof Note) {
                result = { id: index, title: item.content.text };
            } else if (item instanceof Task) {
                result = { id: index, title: item.name };
            }

            console.log(item);
            console.log(item instanceof Goal);
            console.log(item instanceof Note);
            console.log(item instanceof Task);

            return result; 
        });
Run Code Online (Sandbox Code Playgroud)

我的所有日​​志都显示为false,这是控制台的样子:

没有匹配的类型

尽管明确只有3种类型是可能的,但它们都没有匹配.您还可以看到对象本身的类型名称为Goal,因此我不明白为什么它与目标的instanceof不匹配.

有任何想法吗?

javascript types casting instanceof typescript

6
推荐指数
3
解决办法
9154
查看次数