我想要一个方法,从之前解析的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的内容是否正确?
我有以下方法:
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会比较对象实例,但在这种情况下我试图发现对象的类型.
任何人都知道如何使用这种方法进行比较?
有没有办法根据方法的传递参数使用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条件.那可能吗?如果是这样,怎么样?:)
谢谢
我确实在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类型,我不知道如何绕过那些实例检查?
这在某种程度上与询问相同:是否存在子类/超类基元类型的任何内容?
(因为((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 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) 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是什么,因为它是一个变量.我无法初始化它,因为我不知道它需要什么参数,它也可能做一些讨厌的事情.(而且我永远不需要初始化这个变量,因为它是一种测试).
考虑以下代码:
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类的实例?
我正在用C++创建一个2D游戏,它使用了由瓷砖制成的等级.世界级具有add(WorldObject* o)可以接受瓦片或诸如敌人的实体的功能.这个Tile和Entity类都来自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++做到这一点?
假设我们有以下定义.
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?为什么?我的理解是,引用类型b是Boat,但Boat与之无关Toy,所以它应该是,false但答案是true.
instanceof ×10
java ×8
inheritance ×2
object ×2
android ×1
boolean ×1
c++ ×1
class ×1
generics ×1
interface ×1
isinstance ×1
polymorphism ×1
python ×1