我在AppEngine中有以下java模型类:
public class Xyz ... {
@Persistent
private Set<Long> uvw;
}
在Java中使用空设置 uvw 保存对象 Xyz 时,我得到一个“ null ”字段(在appengine数据存储区查看器中列出)。 当我尝试在python中加载相同的对象(通过remote_api)时,由以下python模型类定义:
class Xyz(db.Model):
uvw = db.ListProperty(int)
我收到“ BadValueError:属性uvw是必需的”。
在python中使用空 uvw 列表保存同一类的另一个对象时,数据存储区查看器会打印一个“缺少”字段。
显然空列表存储处理在Java和python之间有所不同,导致“不兼容”的对象。
因此我的问题是:有没有办法:
关于如何处理两种语言的空列表字段的任何其他建议。
感谢您的回答!
答案 0 :(得分:2)
如果为Python属性指定默认值,它应该可以工作:
uvw = db.ListProperty(int, default=[])
答案 1 :(得分:1)
我使用的是低级别的java api,所以也许我正在做的事情会有所不同。但在将集合类型数据结构保存到数据存储区之前,我将其转换为数据存储区自然处理的内容。这主要包括Strings和ByteArrays。
听起来java应用引擎将空集解释为空值。并且python没有正确读取这个空值。您可以尝试将空集保存为字符串值“空集”。然后进行python检查以查看数据存储区是否包含该字符串值。如果是,它可以分配一个新的空集,如果没有,它可以将该属性作为集读取。
答案 2 :(得分:0)
Java Set行为是因为Java的Collections是引用类型,默认为null。
要实际创建一个空集,请按以下方式声明:
@Persistent
private Set<Long> uvw = new HashSet<Long>();
或在右侧使用Set
的其他一些实现。但HashSet
是最常用的Set类型。其他有趣的集合类型是两个线程安全集CopyOnWriteArraySet
和ConcurrentSkipListSet
;还有订单集类型LinkedHashSet
和排序集类型TreeSet
。
答案 3 :(得分:0)
它可能对您有用
import numpy as np
import matplotlib.pyplot as plt
xlist = np.linspace(-40, 40)
ylist = np.linspace(-40, 40)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X ** 2 + Y ** 2 )
plt.figure()
#These are my values for a certain radius
levels = [15, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 34, 36, 37]
contour = plt.contourf(X, Y, Z, levels)
contour_filled = plt.contourf(X, Y, Z, levels)
plt.colorbar(contour_filled)
plt.show()
它是最简短的评论方式...