比方说,有一个Hibernate实体通过注释配置了字段访问.我想映射一个Java类字段,_name
以便它的Hibernate的逻辑名称name
,例如,当从HQL查询引用时.我需要这个主要用于收藏.
预测不正确的建议:将访问类型切换为"属性"是不可能的; 该任务与物理列的名称无关.
我很好奇,如果某些块动态依赖于外部条件,那么通过顺序追加文本块来构建String值的最佳方法是什么.解决方案应该是Scala惯用的,没有太多的速度和内存惩罚.
例如,如何在Scala中重写以下Java方法?
public String test(boolean b) {
StringBuilder s = new StringBuilder();
s.append("a").append(1);
if (b) {
s.append("b").append(2);
}
s.append("c").append(3);
return s.toString();
}
Run Code Online (Sandbox Code Playgroud) 是否有任何Scala技巧可以启用与地图键的模式匹配?换句话说,我想在Map实例旁边有一个提取器也接受一个键值,这意味着只有当matchable值是Map的一个实例并且有一个带有给定键的条目时,我希望这个模式匹配在其中,此条目的值受递归模式匹配的影响.
像这样的东西:
myMap match {
case MyMap("a")(a) => // do smth with value a
case MyMap("b")(MyMap("c")(c)) => // do smth with value c
}
Run Code Online (Sandbox Code Playgroud)
更新:
我找到了一些接近目标的方法,但它仍然不完美,因为它意味着合成键值持有者的定义:
case class MapKey[K](key: K) {
def unapply(o: Any) = o match {
case m: Map[K, _] ? m.get(key)
case _ ? None
}
}
val m1 = Map("a" ? "aa", "b" ? Map("c" ? "cc"))
val m2 = Map("a" ? "aa", "d" ? "dd")
val b = MapKey("b")
val c = MapKey("c")
val d …
Run Code Online (Sandbox Code Playgroud) 根据经验发现,Scala允许对象私有变量和方法的名称冲突,如下所示:
class Test {
private[this] var x = 1
def x(): String = this.x.toString
}
Run Code Online (Sandbox Code Playgroud)
此代码至少对Scala 2.10有效,并且完全符合我的预期(反编译成Java):
public class Test {
private int x;
public String x() {
return BoxesRunTime.boxToInteger(x).toString();
}
public Test() {
x = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我不确定我是否可以在以后的Scala版本中依赖这种行为,因为我无法在规范中找到这种行为是设计的权威证据.那么,有人能建议我这样的知识来源吗?
更新:我的目标是使用这种方法将Hibernate数据模型映射到Scala类.由于没有简单的方法可以让Hibernate支持Scala集合,因此我希望将Java集合映射到私有字段中,然后以自我标题的访问器方法将其包装到Scala集合中.关键要求是保持字段和方法的名称相同,因为我还想保留逻辑Hibernate集合名称,例如在HQL中引用它.
我花了很多天,试图找到一个可以连接到使用Negotiate/NTLM身份验证的Microsoft Dynamics CRM的正确Java框架.我使用各种HTTP协议处理程序,使用JAX-WS,Axis2,CXF尝试了Stackoverflow和其他资源上的所有现有建议.没有人像预期的那样工作.目前最好的方法是Axis2/commons-httpclient-3.1,我可以使用NTLM摘要跟踪至少所有三个阶段,但目标IIS仍然拒绝使用401 Unauthorized进行身份验证.阿帕奇CXF - 都与一个内置的Java6 NTLM支持和JCIFS,其中一些人建议的一种补救措施,也没有工作,要么因为前者未能在第二401响应(虽然它应该已经发送第三请求,根据协议),后者尝试从空输入流中读取响应代码并失败.
那么,问题是是否有人成功地从Java 6平台掌握了受NTLM保护的SOAP Web服务?