下面是Scala中类型安全,流畅的构建器模式,如http://www.tikalk.com/java/blog/type-safe-builder-scala-using-type-constraints中所述.它与Scala和Java的Builder Library类似,但特别涉及编译时构建器检查.这怎么能从Java调用?可以使用干净的Scala 和 Java API来实现"scala.Predef $$ eq $ colon $ eq"参数吗?
sealed trait TBoolean
sealed trait TTrue extends TBoolean
sealed trait TFalse extends TBoolean
class Builder[HasProperty <: TBoolean] private(i: Int) {
protected def this() = this(-1)
def withProperty(i: Int)(implicit ev: HasProperty =:= TFalse) = new Builder[TTrue](i)
def build(implicit ev: HasProperty =:= TTrue) = println(i)
}
//javap output
public class Builder extends java.lang.Object implements scala.ScalaObject{
public Builder withProperty(int, scala.Predef$$eq$colon$eq); //How is this called from Java?
public void …Run Code Online (Sandbox Code Playgroud) 我正在移植一些Java代码并具有以下内容
val overnightChanges: java.util.Hashtable[String, Double] = ...
Run Code Online (Sandbox Code Playgroud)
当我尝试
if (null != overnightChanges.get(...))
Run Code Online (Sandbox Code Playgroud)
我收到以下警告
警告:使用`!='比较Null和Double类型的值将始终为true
这里发生java list convertion错误
Scala代码
@SuppressWarnings("unchecked")
@Override
def getAllStudents():List[Student] = {
return getSession().createQuery("from Student where isDelete = 'false' ")
.list() **here error occured and that shows below **
}
Run Code Online (Sandbox Code Playgroud)
在这里我导入此声明,但没有变化
import scala.collection.JavaConverters._
Run Code Online (Sandbox Code Playgroud)
错误 类型不匹配; 发现:java.util.List [?0]其中类型为?0:scala.collection.immutable.List [com.model.domain.entity.Student]
Java代码
@SuppressWarnings("unchecked")
@Override
public List<Student> getAllStudents() {
return getSession().createQuery(
"from Student where isDelete = 'false' ").list();
}
Run Code Online (Sandbox Code Playgroud) 我正在使用一个java库,其中一个类有一个名为"type"的成员.如果我做这样的事情:
class MyClass{
public MyClass(){
type = 5;
}
public int type;
}
Run Code Online (Sandbox Code Playgroud)
然后java编译器编译好了.但是,如果我尝试从scala访问它:
val x = new MyClass()
x.type = 10
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
预期的标识符,但找到'类型'.
我该如何解决这个问题?
我猜这已经出现过,但我找不到相关的问题.
我有一个Scala函数 f(s1: String, s2: String): Map[String,String]
我想允许一个用Java编写的同事来调用我正在编写的Java方法:
HashMap<String, String> f(String s1, String s2)
这会调用我的Scala函数.我发现,在Java方面,Scala已经返回了scala.collection.immutable.Map.
如何从中创建Java HashMap?或者我应该做别的事吗?
我有一段 Java 代码,用于在类的静态方法中查找注释。
processor.readStatics( MyClass.class ); // Takes Class<?>
Run Code Online (Sandbox Code Playgroud)
如何从 scala 内部向此函数提供 scala 伴随对象的方法?
class MyClass {
}
object MyClass {
def hello() { println("Hello (object)") }
}
Run Code Online (Sandbox Code Playgroud)
我看来:
MyClass$.MODULE$.getClass()
Run Code Online (Sandbox Code Playgroud)
应该是答案。然而,MyClass$ 似乎在 scala 中缺失了(至少在 2.10 中)并且仅对 Java 可见。
println( Class.forName("MyClass$.MODULE$") )
Run Code Online (Sandbox Code Playgroud)
也失败了。
鉴于:
scala> var a = Map.empty[String, List[Int]]
a: scala.collection.immutable.Map[String,List[Int]] = Map()
scala> a += ("AAA" -> List[Int](1,3,4))
scala> a += ("BBB" -> List[Int](4,1,4))
scala> a
res0: scala.collection.immutable.Map[String,List[Int]] = Map(AAA -> List(1, 3, 4), BBB -> List(4, 1, 4))
Run Code Online (Sandbox Code Playgroud)
如何将值连接到单个可迭代集合(待排序)?
List(1, 3, 4, 4, 1, 4)
Run Code Online (Sandbox Code Playgroud)
我该如何结束这段代码?
a.values.[???].sorted
Run Code Online (Sandbox Code Playgroud) collections containers scala scala-java-interop scala-collections
我正在查看scala反射概述,我想知道是否可以java.lang.Class<T>在Scala 2.10中使用a 作为类型.
import scala.reflect.runtime.{ universe => ru }
class Reflector {
def getType: ru.Type = {
ru.typeOf[java.lang.String]
}
def getType[T](clazz: Class[T]): ru.Type = {
//is it possible to implement me?
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在parse[T](clazz: Class[T]): ru.Type不更改其签名的情况下实现该方法,以便能够从java中调用它new Reflector().parse(String.class)?
如果可能,我将如何从java中循环ListBuffer.ListBuffer的初始化(在scala中)
var newModVersions: ListBuffer[NewModVersionEntry] = new ListBuffer[NewModVersionEntry]()
Run Code Online (Sandbox Code Playgroud)
当前智能for循环(在java中)
for (VersionCheckHandler.NewModVersionEntry entry : XplosionCoreBL.newModVersions())
Run Code Online (Sandbox Code Playgroud) I am using a Java API that requires ArrayList as parameter. Now in Scala, I have a List[String]. How can I convert the List[String] to ArrayList in Scala?
I have tried :
import scala.collection.JavaConverters._
val scalaList = List("a","b","c")
scalaList.asJava
Run Code Online (Sandbox Code Playgroud)
Result is:
java.util.List[String] = [a, b, c]
Run Code Online (Sandbox Code Playgroud)
The above does not work because I want the result to be
java.util.ArrayList[String]
代替
java.util.List [String] = [a,b,c]