Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用int调用setProperty,但getProperty在google app engine持久存储上返回Long_Java_Google App Engine_Entity - Fatal编程技术网

Java 使用int调用setProperty,但getProperty在google app engine持久存储上返回Long

Java 使用int调用setProperty,但getProperty在google app engine持久存储上返回Long,java,google-app-engine,entity,Java,Google App Engine,Entity,当将此代码与DatastoreService一起使用时,我得到的ClassCastException Long acnot在fromEntity中转换为整数。这是正常的行为吗?(我在本地计算机上使用google plugin for eclipse进行调试时会出现这种行为) 我是否总是必须像这样捕获此异常: try { ret._integerval = (Integer)ent.getProperty("property1"); } catch( ClassCastException

当将此代码与DatastoreService一起使用时,我得到的ClassCastException Long acnot在fromEntity中转换为整数。这是正常的行为吗?(我在本地计算机上使用google plugin for eclipse进行调试时会出现这种行为)

我是否总是必须像这样捕获此异常:

try
{
    ret._integerval = (Integer)ent.getProperty("property1");
}
catch( ClassCastException ex ) {
    Long val = (Long)ent.getProperty("property1");
    ret._integerval = val.intValue(); 
}

或者可能所有的数值都存储得很长?我是否必须将_integervaltype更改为long以避免此异常?

在强制转换时使用
int
而不是
Integer

ret._integerval = (int)ent.getProperty("property1");
编辑:

API中包括以下内容

当值存储在数据存储中时,它将转换为 数据存储的本机类型。这可能包括加宽,例如转换 从短到长


因此,您的int数据正在转换为数据存储的本机类型,即
Long
。使用
long
long
强制转换创建新整数:

Integer property = new Integer(entity.getProperty("propertyKey").toString());

整数值保存为Long,因此app engine将始终返回Long,我自己也很困惑,但后来我看到如果您想在程序中使用
int
,那么这可以:

int i = (int) (long) entity.getProperty(propertyName);
仍然要确保数字进入整数范围(已讨论)。

当值存储在数据存储中时,它将转换为 数据存储的本机类型。这可能包括加宽,例如转换 从短到长

所以

  • 设置为int,但将其强制转换为long,因为出于某种原因,本地环境中的数据存储行为不同,并且它也存储整数
  • 获取Long并使用.intValue()


  • 同样的。Get java.lang.ClassCastException:java.lang.Long不能转换为java.lang.Integer。
    int i = (int) (long) entity.getProperty(propertyName);
    
    public int get() {
        return ((Long) entity.getProperty(FIELD)).intValue(); 
    }
    
    public void set(int value) {
        entity.setProperty(FIELD, (long)value); 
    }