Scala 遇到问题

关键字

Scala while遇到问题

# scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL
    val result = new ByteArrayOutputStream();
    var buffer: Array[Byte] = new Array[Byte](1024)
    var length = inputStream.read(buffer)
    while (false){
      println("false,false,false")
    }
    
    while ((length = inputStream.read(buffer)) != -1) {
      println("::::: " + (length != -1))
      println("length =" + length + " | (length != -1) = " + (length != -1))
      length = inputStream.read(buffer)
      result.write(buffer, 0, length);
    }

输出

::::: false
length =-1 | (length != -1) = false
Exception in thread "main" java.lang.IndexOutOfBoundsException
	at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:151)
	at com.bl.bigdata.cdp.cdpstream.MonitorApplication$.send_http_request(MonitorApplication.scala:36)
	at com.bl.bigdata.cdp.cdpstream.MonitorApplication$.main(MonitorApplication.scala:11)
	at com.bl.bigdata.cdp.cdpstream.MonitorApplication.main(MonitorApplication.scala)

while ((length = inputStream.read(buffer)) != -1)在scala中没有生效,问题原因还需要再查看.

需要修改为

    val buffer: Array[Byte] = new Array[Byte](1024)
    var length = inputStream.read(buffer)
    while (length != -1) {
      println("::::: " + (length != -1))
      result.write(buffer, 0, length);
      length = inputStream.read(buffer)
    }
// OR
    in.readLine.foreach(x => {
      sb.append(line);
      sb.append("\n");
    })

与Java交互

数组

java file


public class Cat {
    private String name = "none";

    public Cat(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Cat name is " + name + "";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


public class CC1 {
    public static void printlnBasicArray(int[] arrs) {
        for (int arr : arrs) {
            System.out.println(arr);
        }
    }

    public static void printlnObjArray(Cat[] arrs) {
        for (Cat arr : arrs) {
            System.out.println(arr);
        }
    }
}

打印基础java数组

    val ints = Array(1, 2, 4, 5)
    CC1.printlnBasicArray(ints)

打印基础java对象数组

    val cats = Array(new Cat("mi1"), new Cat("mi2"))
    CC1.printlnObjArray(cats)

遇到问题

import java.util.{Date, Properties}
import javax.mail.internet.{InternetAddress, MimeMessage}
import javax.mail.{Message, Session}
// 由于InternetAddress是Address 子类,就直接用了
val address1 = new InternetAddress("xxx1@qq.com")
val address2 = new InternetAddress("xxx2@bl.com")
val addresses = Array(address1, address2)

// ...
val msg = new MimeMessage(session);
msg.setRecipients(Message.RecipientType.CC, addresses) //
// ...

输出

C:\src\bl\cdpstream\src\test\scala\MailTest.scala:65:9
overloaded method value setRecipients with alternatives:
  (x$1: javax.mail.Message.RecipientType,x$2: String)Unit <and>
  (x$1: javax.mail.Message.RecipientType,x$2: Array[javax.mail.Address])Unit
 cannot be applied to (javax.mail.Message.RecipientType, Array[javax.mail.internet.InternetAddress])
    msg.setRecipients(Message.RecipientType.CC, address)

解决方式
输出错误非常显示为类型不一样.

方法一

 val address1 = new Address {
   override def getType: String = "rfc822";
   override def toString: String = "xxx1@qq.com"
   override def equals(obj: Any): Boolean = obj.toString.equals(toString)
 }

 val address2 = new Address {
   override def getType: String = "rfc822";
   override def toString: String = "xxx2@bl.com"
   override def equals(obj: Any): Boolean = obj.toString.equals(toString)
 }

 val address = Array(address1, address2)
 msg.setRecipients(Message.RecipientType.CC, address)

方法二

val address1 = new InternetAddress("xxx1@qq.com")
val address2 = new InternetAddress("xxx2@bl.com")

val address = Array(address1.asInstanceOf[Address], address2.asInstanceOf[Address])
msg.setRecipients(Message.RecipientType.CC, address)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大怀特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值