public List<String> foo1() {
List<String> retval = bar();
if (retval == null)
return Collections.emptyList();
else
return retval;
}
public List<String> foo2() {
List<String> retval = bar();
return retval == null ? Collections.emptyList() : retval;
}
Run Code Online (Sandbox Code Playgroud)
为什么foo1()
编译很好而foo2()
有错误?(更准确地说"类型不匹配:无法从List <capture#1-of?extends Object>转换为List <String>")
我原以为这两个函数都会编译成相同的字节码,所以一个聪明的编译器应该推断出正确的类型emptyList()
...
在给定初始参数的情况下,我需要生成受控的伪随机数序列.为此,我使用标准的python随机生成器,由此参数播种.我想确保我将跨系统生成相同的序列(操作系统,但也包括Python版本).
总结:python是否确保其伪随机数生成器在实现和版本中的可重复性/可移植性?
奇怪的AbstractList::equals()
是,如果两个列表具有相同的大小,则默认的JDK 6实现似乎不会先检查:
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof List))
return false;
ListIterator<E> e1 = listIterator();
ListIterator e2 = ((List) o).listIterator();
while(e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1==null ? o2==null : o1.equals(o2)))
return false;
}
return !(e1.hasNext() || e2.hasNext());
}
Run Code Online (Sandbox Code Playgroud)
如果两个列表都包含大量项目或需要时间进行比较的项目,则会在意识到一个列表比另一个列表短之前对它们进行比较; 这对我来说似乎真的很低效,因为即使没有调用一个比较也可以做到平等.
特别是对于许多情况,列表大小在大多数情况下会有所不同.此外,大多数Java List
实现具有O(1)size()
性能(甚至LinkedList,其在缓存中保持其大小).
这个默认实现有充分的理由吗?
在给定初始整数参数的情况下,我需要生成受控的伪随机数序列.为此,我使用标准Java Random类,由整数参数播种.我想确保在可预见的未来(以及更多!)中我将跨系统(操作系统,还有Java/JDK版本)生成相同的序列.
总结:Java是否确保其伪随机数生成器在实现和版本之间的可重复性/可移植性?
我在AppEngine中有以下java模型类:
public class Xyz ... {
@Persistent
private Set<Long> uvw;
}
Run Code Online (Sandbox Code Playgroud)
在Java中使用空集uvw保存对象Xyz时,我得到一个" null "字段(如appengine数据存储区查看器中所列).当我尝试在python中加载相同的对象(通过remote_api)时,由以下python模型类定义:
class Xyz(db.Model):
uvw = db.ListProperty(int)
Run Code Online (Sandbox Code Playgroud)
我得到一个" BadValueError:属性uvw是必需的 ".
在python中使用空的uvw列表保存同一类的另一个对象时,数据存储区查看器将打印" 缺少 "字段.
显然空列表存储处理在Java和python之间有所不同,并导致"不兼容"对象.
因此我的问题是:有没有办法,或者:
或者关于如何处理两种语言的空列表字段的任何其他建议.
谢谢你的回答!
我有二进制文件,想要提取部分内容,从知道字节字符串(即FF D8 FF D0)开始,以已知字节字符串结尾(AF FF D9)
在过去,我曾经习惯dd
从开始/结束中删除部分二进制文件,但这个命令似乎不支持我的要求.
终端上的什么工具可以做到这一点?
在Jersey(JAX-RS)请求的上下文中获取客户端区域设置的最佳和更便携的方法是什么?我有以下代码:
@GET
@Produces("text/html")
@Path("/myrequest")
public Response myRequest(@Context HttpServletRequest request) {
Locale locale = ...
}
Run Code Online (Sandbox Code Playgroud)
请假设"请求"是由浏览器中的某些javascript代码通过调用生成的 window.location = ...;
在AppEngine上使用Objectify计算查询返回的对象数量(实际加载它们)的最佳(即最有效)方法是什么?我猜最好的方法是获取所有密钥并计算结果:
public int getEntityCount(Long v) {
Objectify ofy = ObjectifyService.begin();
Iterable<Key<MyEntity>> list = ofy.query(MyEntity.class)
.filter("field", v).fetchKeys();
int n = 0;
for (Key<MyEntity> e : list)
n++;
return n;
}
Run Code Online (Sandbox Code Playgroud)
似乎没有任何专门的方法来做到这一点.有任何想法吗?
我有一个包含两列的表格:纬度和经度。我想将所有对象放入“矩形”(好吧,纬度/经度坐标度量中的矩形)边界框内:最小-最大纬度和最小-最大经度。基本上归结为以下伪SQL:
SELECT * FROM MyTable WHERE lat < :maxlat AND lat > :minlat
AND lon < :maxlon AND lon > :minlon
Run Code Online (Sandbox Code Playgroud)
索引我的表的最佳解决方案是什么?两列索引?两列上的两个索引?空间索引?
我想知道在这种情况下是否真的需要空间索引,因为您需要一个特殊的列、特定的库,所有这些都以牺牲数据库的可移植性和简单性为代价。
注意:我想保持这个问题与数据库无关,但为了完整起见,我提到我正在使用 PostGreSQL 8,没有(现在)PostGIS。
我有一个带有复合主键的(大)表,由 5 列(a、b、c、d、e)组成。
我想有效地选择具有给定值的其中两列(a + e)的所有行。
在 PostgreSQL 中,我需要一个索引吗?或者数据库会使用主键(甚至部分使用?)
我看过下面的帖子,其中指定 MySQL 可以使用多列索引的最左边部分来有效地查询行。但我在复合主键上没有找到 PostgreSQL 的任何内容。
postgresql indexing primary-key composite-index composite-primary-key
java ×5
portability ×2
postgresql ×2
python ×2
random ×2
bash ×1
collections ×1
database ×1
datanucleus ×1
dump ×1
generics ×1
indexing ×1
java-7 ×1
jax-rs ×1
jdk1.6 ×1
jersey ×1
linux ×1
list ×1
locale ×1
objectify ×1
postgis ×1
primary-key ×1
terminal ×1