我想知道标准库是完全null免费的 - 如果不是 - 会感兴趣的是合理的用例存在哪些返回null比返回一些Option实例更可取.
我有两个字段如下(注意第一个字段有毫秒部分):
{
"updateTime":"2011-11-02T02:50:12.208Z",
"deliverTime"?"1899-12-31T16:00:00Z"
}
Run Code Online (Sandbox Code Playgroud)
我想用Json将Json字符串反序列化为一个对象,所以我得到一个Gson实例:
GsonBuilder gb = new GsonBuilder();
gb.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
gson = gb.create();
Run Code Online (Sandbox Code Playgroud)
第一个字段被反序列化为Java日期类型:2011-11-02 02:50:12.208(看起来像忽略了时区部分-'Z',这是我所期望的).但是,第二个字段被反序列化为1900-01-01 00:00:00(我住在中国,这里是+ 8 GMT),似乎时区部分-'Z'在反序列化中起作用.
为什么第二个字段使用时区部分?这不是我的预期.
我试图计算我的Java程序可用的内存量.我有这个当前的实现:
long getAvailableMemory() {
Runtime runtime = Runtime.getRuntime();
long totalMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();
long maxMemory = runtime.maxMemory();
long usedMemory = totalMemory - freeMemory;
long availableMemory = maxMemory - usedMemory;
return availableMemory;
}
Run Code Online (Sandbox Code Playgroud)
是对的吗?是否有更简单/更准确的方法来计算这些信息?看了别人的代码后,我看到了类似的东西,略有不同:
long getAvailableMemory() {
long totalVmHeap = Runtime.getRuntime().totalMemory();
long freeVmHeap = Runtime.getRuntime().freeMemory();
long usedVmHeap = totalVmHeap - freeVmHeap;
long maxVmHeap = Runtime.getRuntime().maxMemory();
long availableVmHeap = maxVmHeap - usedVmHeap + freeVmHeap;
return availableVmHeap;
}
Run Code Online (Sandbox Code Playgroud)
无论如何,获取这些信息的正确方法是什么?
是否存在类似于C++的libconfig的Java库,其中配置文件以类似JSON的格式存储,可以由人类编辑,然后从程序中读取?
我不想使用Spring或任何更大的框架.我正在寻找的是一个小型,快速,独立的库.我看了java.util.Properties,但它似乎不支持分层/嵌套配置数据.
有没有办法在使用Gson fromJson方法时使用给定类的set 方法?
我想这样做是因为对于String目标类的每个全局变量都进行了修剪.
是否有任何GSON API注释?
我知道GSON提供了编写自定义序列化器/反序列化器的能力,但我想知道是否有另一种方法来实现这一点.
我找不到打电话selectRowAtIndexPath:animated:scrollPosition:给最初选择一行的好地方UITableView.在初始化表视图控制器时,尚未加载表数据,因此在初始化后我无法立即进行选择UITableViewController(否则会发生超限异常).
比方说,我有一堆"验证"函数,如果没有错误则返回None,否则返回Some(String)指定错误消息.像下面这样的东西......
def validate1:Option[String]
def validate2:Option[String]
def validate3:Option[String]
Run Code Online (Sandbox Code Playgroud)
我将按顺序调用它们,一旦返回Some(String),我就会停止并返回相同的内容.如果它返回None,我会转到下一个,直到序列结束.如果所有这些都返回None,则返回None.
我想把它们粘在一起"表达".就像是 ...
for( a <- validate1; b <- validate2; c <- validate3) yield None;
Run Code Online (Sandbox Code Playgroud)
但是,Option完全与我想要的相反.它在None处停止,并以Some(String)跟随.
我怎样才能实现这样的目标?
我想知道这里的原因是什么(implicit ev: Null <:< A1):
sealed abstract class Option[+A] extends Product with Serializable {
def orNull[A1 >: A](implicit ev: Null <:< A1): A1 = this getOrElse null
...
}
Run Code Online (Sandbox Code Playgroud)
岂不
def orNull[A]: A = this getOrElse null
Run Code Online (Sandbox Code Playgroud)
考虑到它似乎甚至不适用于像这样的值类型
Option(1).orNull
Run Code Online (Sandbox Code Playgroud)
但
Option(1).getOrElse(null)
Run Code Online (Sandbox Code Playgroud)
呢?
Option的源代码
考虑这两个类以及创建实例的方式:
class Person1(val name: String)
val p1 = new Person1("John");
Run Code Online (Sandbox Code Playgroud)
和:
abstract class Person2 {
val name: String
}
val p2 = new Person2 {
val name = "John"
}
Run Code Online (Sandbox Code Playgroud)
为什么人们更喜欢后者(Person2)版本?每个这样的声明都会导致创建新的子类,而且代码稍微冗长且可读性较差,但是第二个习惯用法在Scala的Programming中多次使用.直接领域有哪些优势?
我需要使用spray框架发出一个简单的HTTP请求.我在他们的网站上发现了一些例子,但事实证明它们很复杂并且涉及Akka,这对我来说并不是必需的.
此外,我需要能够填写请求的标题(如X-Application,content-type等),当然还有请求的发布数据(在我的情况下,它将是JSON中的数据).
那我该怎么做?