「java引用scala」java引用scanner

博主:adminadmin 2022-12-11 17:30:07 70

今天给各位分享java引用scala的知识,其中也会对java引用scanner进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何将如下的java代码用scala写

@RunWith(Parameterized.class)

public class MeetingHttpApiTest extends TestBase {

@Test

public void testMeetingHttpApi() {

TedaCaseVo tedaCaseVo = tedaCaseService.getTedaCase(tedaCaseId);

String url = tedaCaseVo.getParamJsonStr();

TedaTool.record(tedaCaseVo, SwordHttp.get(url), tedaCaseService);

}

@Parameters

public static Collection data() {

return Arrays.asList(new Object[][]{{22L}, {23L}, {24L},{25L}, {26L}, {27L}});

}

public MeetingHttpApiTest(Long tedaCaseId) {

this.tedaCaseId = tedaCaseId;

}

protected Long tedaCaseId = 1L;

}

其中,TestBase类:

@SpringApplicationConfiguration(classes = Application.class)

@WebAppConfiguration

public class TestBase {

@Autowired

protected TedaCaseService tedaCaseService;

private TestContextManager testContextManager;

@Before

public void setUpContext() throws Exception {

this.testContextManager = new TestContextManager(getClass());

this.testContextManager.prepareTestInstance(this);

}

}

scala trait 接口java怎么使用

今天说一说Java中的接口和Scala中的trait。一直就把特质当做半个接口用,因为确实挺像的,但仔细看,还是有很大区别的。

1.接口不会有构造器,特质可以有构造器,并且在实现类继承特质的时候,先要调用特质的构造器。

trait构造器的调用顺序小结:

class B{}

trait C extends E{}

trait D extends E{}

A extends B with C with D

(1)先调用父类构造器B

(2)继承多个trait从从左至右依次执行,先调用父trait E构造器,再调用C,再调用D构造器

(3)如果多个trait继承同一个父trait,则父trait只执行一次

(4)所有父类构造器和trait构造器执行完毕之后再执行自己的构造器A

2.接口中不能有未初始化的属性,且属性的修饰都是public static final,特质中可以有未初始化的属性变量,即抽象字段;

未初始化的属性可以有提前定义的特性,有两种方法,例如:

trait A{

val name:String//抽象字段

println("name: "+name)//特质中构造器执行的语句

}

class B extends A{

val name:String = "张三"

}

此时如果在main函数中new B的话,肯定会报错,因为new B必然先会调用特质中的构造器,而name并没有被赋值,所以会报错。有三种方法解决:

(1)class B extends {

val name:String = "张三" //提前定义在类前

} with A{}

(2)class B{}

main函数中new B的时候:

val b = new {

val name:String = "张三"//提前定义在new对象前

} with B with A

(3)利用lazy特性

trait A{

lazy val name:String = null

println("name: "+name)

}

class B extends A{

override lazy val name:String = "张三"

}

scala.reflect.classtag java怎么传入

Java 和 Scala 都支持变参方法, 写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去。也可以传入数组参数,因为变参本质上就是一个数组,就是把 ... 开始位置到最后一个参数都收纳到数组中去,所以变参之所以要放在最后的位置上,且一个方法中最多只能有一个变参类型。

这里主要是对比 Scala 对变参方法的调用,基本调用法当然是没问题的,但是在传入数组作为变参的参数列表与 Java 相对时就稍有变化了。

另外提一下,如果想传入 List 作为变参列表,而不是整体作为变参的第一个元素就是调用集合的 toArray() 方法转换成一个数组传入。

下面看 Java 中对变参方法的调用,参数列表和数组

public class JavaVarArgs {

public static void main(String[] args) {

foo("a", "b", "c");

foo(new String[]{"d", "e"});

}

public static void foo(String...params) {

System.out.println(params + " : " + params.length);

for(String s: params) {

System.out.println(s);

}

}

}

从输出结果能够很明白的看出变参 params 实际上就是一个数组

[Ljava.lang.String;@3f91beef : 3

a

b

c

[Ljava.lang.String;@1a6c5a9e : 2

d

e

我们知道 Scala 和 Java 之间可以互相调用,现在写一段 Scala 代码来调用 foo() 方法

object ScalaVarArgs {

def main(args: Array[String]) {

JavaVarArgs.foo("a", "b", "c")

// JavaVarArgs.foo(Array[String]("d", "e"))

}

}

JavaVarArgs.foo("a", "b", "c") 调用没问题

而 JavaVarArgs.foo(Array[String]("d", "e")) 会有编译问题

Type mismatch: expected String, actual Array[String]

Java 在调用变参方法时可以直接传入相应类型的数组,而 Scala 确不允许这么做了,因它试图把 Array[String] 整体作为一个元素传递给 foo() 方法,而 foo() 要求的元素类型是字符串,所以编译不过。

而 Scala 这时该如何使得与 Java 调用变参方法时的行为一致呢,那就是在调用时再附加说明:是要把数组中的元素逐个传递级变参,写法

JavaVarArgs.foo(Array[String]("d", "e") :_*)

这样的调用输出就是

本文原始链接 , 来自隔叶黄莺 Unmi Blog

[Ljava.lang.String;@7a718e31 : 2

d

e

如果从上面的例子说来,我们的运气还不错,因为编译器告诉了你出现了什么问题。最麻烦的问题总是在能编译,但运行时诡异的情况。

因为在我本人实际中遭遇到的情形是变参类型是 Object 的方法,形如

public static void foo(Object...params) {

System.out.println(params + " : " + params.length);

for(Object o: params) {

System.out.println(o);

}

}

上面把参数改为 Object...params, 不会改变 Java 传数组调用它的行为,但却增加了 Scala 调用它时的排错难度。

在 Scala 中使用 foo(Array[String]("d", "e") 调用并没有编译错误,加入上面的调试代码才发现,不管传入多大的数组,总是输出像

[Ljava.lang.Object;@7814d044 : 1

[Ljava.lang.String;@ea25c1

说方法只接收到了一个元素,类型被识别为形参的类型,不过进一步遍历变参,发现第一个元素是一个字符串数组,所以 Scala 把 Array[String]("d", "e") 整体作为 params 的第一个元素传给了 foo() 方法。写成

foo(Array[String]("d", "e") : _*)

是为了把数组拆散了传给 foo() 方法。

起初以为是 Scala 调用 Java 的变参方法需要这么做,后来重新用 Scala 实现下变参方法

def foo(params: AnyRef*) {

println(params + " : " + params.length)

for (s - params) {

println(s)

}

}

用 Scala 代码来调用它,传入数组,如果不想整体作为一个元素时也必须加上 : _*参数说明,同样的:

foo(Array[String]("d", "e") :_*)

在写这篇之前,我所认定的这是 Scala 调用变参方法的一个缺陷, : _* 似乎是一种默认行为,现在认为这恰恰是 Scala 的一个灵活性所在。Scala 提供了两种方式来传递数组给变参,而为何 Java 不让数组整体作为变参的一个元素呢,不过 Scala 放开这一特性,当变参为 Object... params 确实放大了 Bug 的出现机率。

求助!scala如何调用java静态方法

Scala没有静态方法或静态字段,可以用object这个语法结构来达到同样的目的,对象定义了某个类的单个实例,包含了你想要的特性。

例如:

object Accounts{

private var lastNumber = 0

def newUniqueNumber()={lastNumber+=1;lastNumber}

}

当你在应用程序中需要一个新的唯一账号时,调用Account.newUniqueNumber()即可。

java引用scala的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java引用scanner、java引用scala的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-11,除非注明,否则均为首码项目网原创文章,转载请注明出处。