小编Seb*_*ber的帖子

java数组如何真正起作用

有人可以解释一下阵列在Java中是如何工作的.

我对以下代码感到惊讶:

        Object test = new Object[2][2];
        Object test2 = new Object[] {
                new Object[2],new Object[2]
        };
        Object test3 = new Object[2][];
        ((Object[])test3)[0] = new Object[2];
        ((Object[])test3)[1] = new Object[2];
        System.out.println(test instanceof Object[]);
        System.out.println(test instanceof Object[][]);
        System.out.println(test2 instanceof Object[]);
        System.out.println(test2 instanceof Object[][]);
        System.out.println(test3 instanceof Object[]);
        System.out.println(test3 instanceof Object[][]);
Run Code Online (Sandbox Code Playgroud)

只有test2不是Object [] []的实例

运行时有什么区别?

编辑:我看到一些答案.Jon Skeet,请注意我能做到:

Object[] test4 = (Object [])test;
test4[0] = "blaaa";
test4[1] = "toto";
System.out.println(test4);
Run Code Online (Sandbox Code Playgroud)

test instanceof Object []返回true,并且在转换时没有在运行时引发异常.根据SCJP的Sierra&Bates一书,测试IS-A Object [] []还有一个Object []

但是当试图用"test4 [0] ="blaaa";"重新分配一个新值时,我得到一个异常:线程中的异常"main"java.lang.ArrayStoreException:Main.main中的java.lang.String(Main. Java的:24)

所以在运行时看来,test和test2都是IS-A Object …

java arrays jvm scjp runtime

3
推荐指数
2
解决办法
386
查看次数

如何区分Sorted集合中的两个equals对象?

我可能错了,但对我来说,我们可以为一个对象重写equals,以便你认为它们有意义地等于.映射中的所有条目都具有不同的键,并且集合中的所有条目都具有不同的值(不是有意义的等于)

但是在使用TreeMap或TreeSet时,您可以提供比较器.我注意到,当提供比较器时,绕过对象的equals方法,并且当比较器返回0时,两个objets被认为是等于.因此,我们有2个对象但是在map keyset或set中,只保留一个.

我想知道是否有可能使用已排序的集合来区分两个不同的实例.

这是一个简单的示例:

public static void main(String[] args) {
    TreeSet<String> set = new TreeSet<String>();
    String s1 = new String("toto");
    String s2 = new String("toto");
    System.out.println(s1 == s2);
    set.add(s1);
    set.add(s2);
    System.out.println(set.size());
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用新的String("xxx")会绕过String池的使用,因此s1!= s2.我想知道如何实现比较器,使设置大小为2而不是1.

主要问题是:对于相同String值的两个不同实例,我如何在比较器中返回一些东西!= 0?

请注意,我希望比较器遵守规则:

比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.实现者必须确保所有x和y的sgn(compare(x,y))== -sgn(compare(y,x)).(这意味着当且仅当compare(y,x)抛出异常时,compare(x,y)必须抛出异常.)

实现者还必须确保关系是传递的:((compare(x,y)> 0)&&(compare(y,z)> 0))表示compare(x,z)> 0.

最后,实现者必须确保compare(x,y)== 0意味着所有z的sgn(compare(x,z))== sgn(compare(y,z)).

通常情况是这样,但并非严格要求(compare(x,y)== 0)==(x.equals(y)).一般来说,任何违反此条件的比较器都应清楚地表明这一事实.推荐的语言是"注意:这个比较器强加了与equals不一致的排序."

我可以用一个技巧:

public int compare(String s1,String s2) {
  if s1.equals(s2) { return -1 }
  ...
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,但自从比较(s1,s2)后规则不受尊重!= -compare(s2,s1)

那么这个问题有什么优雅的解决方案吗?


编辑:对于那些想知道为什么我问这样的事情的人.好奇心比任何现实生活中的问题更重要.

但我已经处于这样的情况,虽然有关此问题的解决方案:

想象一下你有:

class Label {
  String label;
}
Run Code Online (Sandbox Code Playgroud)

对于每个标签,您都有一个关联的String值.现在如果你想要一个map,label-> value怎么办?但是现在如果你希望能够拥有两个与地图键相同的标签呢?Ex"label"(ref1) - > …

java apache-commons guava

3
推荐指数
1
解决办法
236
查看次数

当第一个策略和恢复策略都失败时,Java中的异常组合

假设我有一个方法可能会因检查异常而失败(根据Sun的建议检查,因为它是可恢复的).此方法失败,并触发恢复策略.但是初始方法和恢​​复策略都失败了.

在某些情况下,我可能想要两个堆栈跟踪,以便我知道为什么初始策略和恢复策略都失败了,而不仅仅是最后一个.

我能做什么?我应该创建一个CompositeException类型或类似的东西?这是一个好习惯吗?

java exception-handling exception

3
推荐指数
1
解决办法
776
查看次数

获取证书并将其添加到Java信任库,只有https URL?

我正在尝试通过Google云端消息服务器向Android设备发送推送通知.

我们用来做的URL是:

https://android.googleapis.com/gcm/send
Run Code Online (Sandbox Code Playgroud)

在我们的企业应用程序中,我们不使用默认CA权限,并且出于安全原因,我们在SSLContext属性加载的信任库文件中手动添加我们信任的每个实体.我想将GCM证书添加到我们的信任库.

我不知道如何从该URL获取证书.由于页面重定向到另一个非SSL页面,Chrome/Firefox导出方式似乎无效.

有人有解决方案吗?

java certificate truststore google-cloud-messaging

3
推荐指数
3
解决办法
3万
查看次数

Play2 Scala - 全球无法施展.GlobalSettings

我试图在app/Global.scala中创建一个Global对象来运行Akka调度程序,就像其他一些SO帖子所说的那样.

我的代码几乎是Global对象教程的复制/粘贴,但在启动时我收到以下错误:

Oops, cannot start the server.
PlayException: Cannot init the Global object [Global cannot be cast to play.GlobalSettings]
    at play.api.PlayException$.apply(Exceptions.scala:122)
    at play.api.Application$$anonfun$3.apply(Application.scala:71)
    at play.api.Application$$anonfun$3.apply(Application.scala:67)
    at play.utils.Threads$.withContextClassLoader(Threads.scala:17)
    at play.api.Application.<init>(Application.scala:66)
    at play.core.StaticApplication.<init>(ApplicationProvider.scala:49)
    at play.core.server.NettyServer$.createServer(NettyServer.scala:132)
    at play.core.server.NettyServer$$anonfun$main$5.apply(NettyServer.scala:153)
    at play.core.server.NettyServer$$anonfun$main$5.apply(NettyServer.scala:152)
    at scala.Option.map(Option.scala:133)
    at play.core.server.NettyServer$.main(NettyServer.scala:152)
    at play.core.server.NettyServer.main(NettyServer.scala)
Caused by: java.lang.ClassCastException: Global cannot be cast to play.GlobalSettings
    at play.api.Application.liftedTree1$1(Application.scala:44)
    at play.api.Application.play$api$Application$$javaGlobal(Application.scala:43)
    at play.api.Application$$anonfun$3.apply(Application.scala:68)
    ... 10 more
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

import play.api._
import play.api.Play.current
import akka.util.duration._
import play.api.libs.concurrent._

/**
 * @author Sebastien Lorber (<i>lorber.sebastien@gmail.com</i>)
 * Date: 21/11/12 - …
Run Code Online (Sandbox Code Playgroud)

akka playframework playframework-2.0

3
推荐指数
1
解决办法
3218
查看次数

Cake模式:如何获取组件提供的UserService类型的所有对象

这个问题可以帮助您了解我的需求. 蛋糕模式:每个实现一个组件,或每个特性一个组件?

我有一个使用多个UserService实现的Scala应用程序,它将由组件(s?)提供.

我想知道在另一个组件中是否有一种方法可以"扫描"应用程序,以便我可以检索一组提供实现特征UserService的对象的所有组件?这样我可以迭代我的蛋糕构建应用程序提供的所有UserService接口?

我想我可以有一个组件根据其依赖关系构建一个UserService列表,但是有没有可能让这个组件构建列表而没有任何硬编码依赖?

scala cake-pattern

3
推荐指数
1
解决办法
281
查看次数

上下文绑定[T:Manifest] - >没什么

我使用Jackson Scala模块.

我已经创建了一个小的序列化工具来处理Play2框架接收的json有效负载.

  def unserializePayloadAs[T](implicit requestContext: RequestContext[JsValue]): T = {
    val json: String = Json.stringify(requestContext.request.body)
    unserialize(json)
  }

  def unserialize[T](json: String): T = {
    objectMapper.readValue(json)
  }
Run Code Online (Sandbox Code Playgroud)

Jackson Scala模块的readValue具有签名:

  def readValue[T: Manifest](content: String): T = {
    readValue(content, constructType[T])
  }
Run Code Online (Sandbox Code Playgroud)

在尝试使用我的反序列化代码时,我有一个堆栈.

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate abstract type [simple type, class scala.runtime.Nothing$] (need to add/enable type information?)
at [Source: java.io.StringReader@7bb78579; line: 1, column: 2]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) ~[jackson-databind-2.2.0.jar:2.2.0]
at com.fasterxml.jackson.databind.deser.std.ThrowableDeserializer.deserializeFromObject(ThrowableDeserializer.java:77) ~[jackson-databind-2.2.0.jar:2.2.0]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) ~[jackson-databind-2.2.0.jar:2.2.0]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) ~[jackson-databind-2.2.0.jar:2.2.0]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2041) ~[jackson-databind-2.2.0.jar:2.2.0]
at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.readValue(ScalaObjectMapper.scala:157) ~[jackson-module-scala_2.10-2.2.0.jar:2.2.0] …
Run Code Online (Sandbox Code Playgroud)

scala

3
推荐指数
1
解决办法
790
查看次数

什么是较便宜的哈希算法?

我对哈希算法知之甚少.

我需要在将文件转发到远程系统(有点像S3)之前用Java计算传入文件的哈希,这需要MD2/MD5/SHA-X中的文件哈希.出于安全原因,不会计算此哈希,而只是为了一致性校验和.

我可以使用Java标准库的DigestInputStream在转发文件时实时计算此哈希值,但是想知道最好使用哪种算法来避免使用DigestInputStream的性能问题?

我的一位前同事测试并告诉我们,与unix命令行或文件相比,计算hash实时可能非常昂贵.


关于过早优化的编辑: 我在一家公司工作,目的是帮助其他公司取消他们的文件.这意味着我们有一个处理来自其他公司的文件传输的批次.我们将来每天定位数百万份文档,实际上,此批次的执行时间对我们的业务非常敏感.

每天100万份文档的散列优化10毫秒是每天执行时间缩短3小时,这是非常巨大的.

java encryption hash

3
推荐指数
1
解决办法
1338
查看次数

为什么JS承诺A +创建/履行/拒绝不属于规范的一部分?

http://promisesaplus.com/

最后,核心Promises/A +规范没有涉及如何创建,实现或拒绝承诺,而是选择专注于提供可互操作的方法.配套规范中的未来工作可能涉及这些主题.

作为一个功能开发人员,我通常会处理monad和operator之类的操作,point bind map或者flatMap链接一些包含在monad框内的调用.

根据这个问题的js递延/无极/未来相比,比如Scala函数式语言,在mapflatMap运营商似乎在融化在一起then的JS规范,可能是因为它不会赚那么多有意义的像的JS动态类型语言同时提供(?)并且使用和记住单个操作符更方便.


到目前为止一直很好,有一个then运营商(似乎并不总是正确实施)

但为什么承诺创建/履行/拒绝不是规范的一部分?这就像只有半个monad :( 似乎我不是唯一抱怨的人

通常,我的问题是:

  • 我想创建一个JS库
  • 我想公开一个基于promise的API
  • 我希望客户端选择他想要使用的promise实现

那我该怎么办?

我可以在我的图书馆里创建承诺

Q.fcall(function () {
    return 10;
})
Run Code Online (Sandbox Code Playgroud)

好的很酷,我只是将我的库耦合到Q :(

那么,这个问题有什么解决方案吗?库作者如何创建他暴露给API的承诺而不与实现相结合?

是否有一些免许可证的最低可行承诺A +库可以嵌入我们的库或其他东西?

这个规格选择背后的原因是什么?

javascript promise jquery-deferred q rsvp.js

3
推荐指数
1
解决办法
339
查看次数

[] .concat(["x","y"],"z") - >如何获得[["x","y"],"z"]而不是["x","y", "Z"]?

这很奇怪,但我找不到任何简单的解决方案.

注意:我使用不变性,所以我绝对不想修改原始数组(不建议使用push)

[].concat(["x","y"],"z")- >如何[["x","y"],"z"]取而代之["x","y","z"]

javascript arrays immutability

3
推荐指数
1
解决办法
60
查看次数