我有一个Scala元组:
$data = [];
$brandResult = $db->query("SELECT id, name FROM tbl_brand");
while ($row = $brandResult->fetchObject()) {
$row->product_names = [];
$data[$row->id] = $row;
}
$productResult = $db->query("SELECT id, brand_id, p_name FROM tbl_products");
while ($row = $productResult->fetchObject()) {
$data[$row->brand_id][$row->id] = $row->p_name;
}
我正在从Java访问。问题是在Java中,val myTuple: (Int, Int) = (null.asInstanceOf[Int], 1)
返回myTuple._1()
而不是0
,正如我解释Angular Config。无论值集如何,null
都返回始终为null。因此,我不知道如何检查哪个是真正的价值:如何检查它是myTuple._1
,null
还是其他任何值?
感谢。
答案 0 :(得分:1)
问题是在Java世界中null
不是int
类型的有效值。在Scala世界,事情非常相似。如果你只是运行
println(null.asInstanceOf[Int])
你会得到
0
作为你的输出。此行为在Scala规范的6.3 The Null Value部分中指定。
因此,您无法在null
中测试int
,因为它不能在那里。在Java世界中,解决方法是java.lang.Integer
类,它是int
上的不可变对象包装并支持Autoboxing and Unboxing。因此,您可以尝试将元组指定为
val myTuple: (Integer, Integer) = (null, 1)
然而,在Scala世界中有一个更好的替代 - scala.Option
。而且由于Java 8有类似的java.util.Optional
。所以你真正想要的是像
val myScalaTuple: (Option[Int], Option[Int]) = (None, Some(1))
val myJavaTuple: (Optional[Int], Optional[Int]) = (Optional.empty[Int](), Optional.of(1))