标签: instanceof

如何在Java中确定泛型方法中的类型?

我想要一个方法,从之前解析的JSON对象中提取数据作为正确的类型.JSONObject(rawdata)扩展了Map,所以它看起来像这样:

private <Type> Type getValue(String key, Type def)
{
    if (!rawdata.containsKey(key)) return def;
    if (!(rawdata.get(key) instanceof Type)) return def;
    return (Type) rawdata.get(key);
}
Run Code Online (Sandbox Code Playgroud)

instanceof明显产生编译时错误.该参数def是default-value,如果密钥不可用或类型错误,则返回该参数.但def也可以为null,所以def.getClass()不起作用.

我有什么想法可以检查Map-entry的内容是否正确?

java generics instanceof

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

如何检查param类的类型?

我有以下方法:

public static String getServiceUri(Class<?> c) {

 // I'd like to check which type the parameter is...
 if(c.getClass().equals(MyClass.class)){
     do stuff 1
 } else {
     do stuff 2
 }
}
Run Code Online (Sandbox Code Playgroud)

调用方法: getServiceUri(MyClass.class);

getServiceUri我想基于ServiceClass的类型调用WebService.

我知道equals会比较对象实例,但在这种情况下我试图发现对象的类型.

任何人都知道如何使用这种方法进行比较?

java android instanceof

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

以通用方式使用instanceof

有没有办法根据方法的传递参数使用instanceof?例

doSomething(myClass.class); /* I would like to call this also with other classes */

public void doSomething(/*generic parameter that accepts all classes, not just myClass */) {
  if (myObject instanceOf /* the generic parameter */ == true) {...}
}
Run Code Online (Sandbox Code Playgroud)

有时我会使用myClass.class调用该方法,但有时我想用someOtherClass.class调用它 - 我不想改变if条件.那可能吗?如果是这样,怎么样?:)

谢谢

java instanceof

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

在处理java.lang.Object的实例时避免使用instanceof

我确实在ym代码中有一些instanceof检查,但有一些我希望我能避免.通常只要有多个if语句,例如:

public void setValue(Object newValue) {
    //dateTime is a member variable of the type java.util.Date
    if (newValue instanceof Date) {
      dateTime = new DateTime((Date) newValue);

    } else if (newValue instanceof Calendar) {
      dateTime = MyDateTimeUtils.toDate((Calendar)newValue);

    } else if (newValue instanceof String) {
      dateTime = MyDateTimeUtils.toDate((String)newValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

MyDateTimeUtils只是一个实用程序类,可以转换日期/时间类型(日历到日期,日期到日历,字符串到日期等...).

我的主要问题是,newValue属于实例Object(我无法更改方法签名,因为它是处理数据绑定的框架的一部分).如果它是有形的东西,我想它会更简单,我可以让该类实现一个提供Date转换方法的接口.但由于它是Object类型,我不知道如何绕过那些实例检查?

java object instanceof

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

是否有点使用instanceof与原始类型数组?

这在某种程度上与询问相同:是否存在子类/超类基元类型的任何内容?

(因为((Object) (new String[6])) instanceof Object[]是真的,因为String extends Object.)

例如,的int[],是它唯一的 ((Object) (new int[3])) instanceof int[]是真实的,在Java中的东西?

如果是这样,

((Object) (new int[3])) instanceof int[]
Run Code Online (Sandbox Code Playgroud)

是完全相同的

((Object) (new int[3])).getClass() == int[].class
Run Code Online (Sandbox Code Playgroud)

而我更喜欢后者,因为它应该更快,因为它不必检查每个类型/类继承.

java class object instanceof primitive-types

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

java instanceof没有找到方法

我有java instanceof的问题.我有一个名为Employee的类和其他几个扩展此类的类,例如 - Manager.我还创建了另一个类EmployeeStockPlan,我想测试instanceof是否正在查找我正在使用的对象.但是当我从新类调用一个方法时,我有这个错误:该方法grantStock(Manager)未定义类型Loader.对不起,我对java中的某些东西不知何故,我希望我不是在问愚蠢的问题.

Employee类:

package com.example.domain;

public class Employee {

private int empId;
private String name;
private String ssn;
private double salary;

public Employee(int empId, String name, String ssn, double salary) { // constructor
                                                                        // method;
    this.empId = empId;
    this.name = name;
    this.ssn = ssn;
    this.salary = salary;
}

public void setName(String newName) {
    if (newName != null) {
        this.name = newName;
    }
}

public void raiseSalary(double increase) {
    this.salary += increase;
}

public String …
Run Code Online (Sandbox Code Playgroud)

java instanceof

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

Python - isinstance(classInfo,classInfo)

Python文档说isinstance需要类的实例对象和类信息.问题是:我只有2个类信息对象,必须检查class_inf1是否是class_inf2的一个实例

例:

class Foo(object):
    pass

class Bar(Foo):
    pass

# It should check if Bar is a instance of Foo. Bar can either be one of many subclasses or 
# the same class.
isinstance(Bar, Foo)

# i.e.: the function I'm looking for should be working as if Bar was an object:
isinstance(Bar(), Foo)
Run Code Online (Sandbox Code Playgroud)

在我更复杂的代码中,我不知道Bar是什么,因为它是一个变量.我无法初始化它,因为我不知道它需要什么参数,它也可能做一些讨厌的事情.(而且我永远不需要初始化这个变量,因为它是一种测试).

python instanceof isinstance

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

继承:instanceof运算符令人困惑

考虑以下代码:

class B
{
  int j =100;
}

class A extends B
{
    int i=10;
}

public class Test
{
    public static void main(String[] args)
    {
       A obj =new A();
       System.out.println(obj);
       B obj1 =obj;

       System.out.println(obj1); // here i am confused

       if( obj1 instanceof A )
       {
                System.out.println("yes"); //here i am confused
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的输出是:

A@35186a
A@35186a
yes
Run Code Online (Sandbox Code Playgroud)

现在obj1是B类的一个超类的实例,为什么将toString()它显示为A的对象呢?另外,instanceof运算符如何将它显示为A类的实例?

java polymorphism inheritance instanceof

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

在C++中的instanceof等价物

我正在用C++创建一个2D游戏,它使用了由瓷砖制成的等级.世界级具有add(WorldObject* o)可以接受瓦片或诸如敌人的实体的功能.这个TileEntity类都来自WorldObject.在每种情况下,都应将对象添加到entities列表中; 但如果它是一个图块,它也应该添加到tiles列表中.

World.h

class World {
private:
    list<WorldObject*> content;
    list<Tile*> tiles;
public:
    void add(WorldObject*);
}
Run Code Online (Sandbox Code Playgroud)

World.cpp

void World::add(WorldObject* o) {
    content.push_back(o);
    if(*o instanceof Tile) //What do I need to put here?
        tiles.push_back(o);
}
Run Code Online (Sandbox Code Playgroud)

如何检查对象在C++中是否具有特定类型?这与类型转换和虚函数以及类似的东西无关,因为我不想在此时调用对象的函数; 如果它有某种类型,我只需要将它添加到一个单独的列表中.在Java中,我可以做到if(instance instanceof Class).我怎么能用C++做到这一点?

c++ inheritance instanceof

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

Java Instanceof方法混淆

假设我们有以下定义.

interface Vessel{}
interface Toy{}
class Boat implements Vessel{}
class Speedboat extends Boat implements Toy{}
Run Code Online (Sandbox Code Playgroud)

主要是,我们有这些:

Boat b = new Speedboat();
Run Code Online (Sandbox Code Playgroud)

(b instanceof Toy)评估为true?为什么?我的理解是,引用类型bBoat,但Boat与之无关Toy,所以它应该是,false但答案是true.

java boolean interface instanceof

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