标签: scala-java-interop

用于Scala和Java的类型安全的Builder库

下面是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 scala scala-java-interop

4
推荐指数
1
解决办法
1144
查看次数

如何处理Scala中的Hashtable空值?

我正在移植一些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

scala scala-java-interop

4
推荐指数
2
解决办法
733
查看次数

Java程序将scala转换为互操作性问题

这里发生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 scala scala-java-interop

4
推荐指数
1
解决办法
160
查看次数

访问名为"type"的java成员变量

我正在使用一个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 scala-java-interop

4
推荐指数
1
解决办法
175
查看次数

Scala Map to Java HashMap

我有一个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?或者我应该做别的事吗?

scala scala-java-interop scala-collections

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

如何向 Java 提供 scala 伴随对象的类?

我有一段 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)

也失败了。

static-methods scala scala-java-interop

4
推荐指数
1
解决办法
1133
查看次数

如何连接作为map值的列表?

鉴于:

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

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

在Scala 2.10中获取java.lang.Class [T]的Scala类型

我正在查看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)

reflection scala scala-java-interop

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

在java中循环遍历scala ListBuffer

如果可能,我将如何从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)

java scala scala-java-interop listbuffer

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

How to convert Scala List to Java ArrayList

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]

java scala scala-java-interop

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