小编col*_*ind的帖子

Java中的数字是否有默认类型

如果我写这样的东西

System.out.println(18);
Run Code Online (Sandbox Code Playgroud)

哪种类型有'18'?是int还是byte?或者它没有类型吗?

它不能是int,因为这样的东西是正确的:

byte b = 3;
Run Code Online (Sandbox Code Playgroud)

这是不正确的:

int i = 3;
byte bb = i; //error!
Run Code Online (Sandbox Code Playgroud)

编辑:我想我在Assignment Conversion的规范中找到了正确的部分:

常量的编译时缩小意味着代码如下:

byte theAnswer = 42;

被允许.如果没有缩小,整数文字42的类型为int的事实意味着需要转换为字节:

byte theAnswer =(byte)42; //允许施放但不是必需的

java types integer default numbers

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

如果 A 的泛型子类型声明为返回参数,为什么我不能返回 A 的具体子类型?

abstract class IntTree
object Empty extends IntTree
case class NonEmpty(elem: Int, left: IntTree, right: IntTree) extends IntTree

def assertNonNegative[S <: IntTree](t: S): S = {
  t match {
    case Empty => Empty  // type mismatch, required: S, found: Empty.type
    case NonEmpty(elem, left, right) =>
      if (elem < 0) throw new Exception
      else NonEmpty(elem, assertNonNegatve(left), assertNonNegative(right)) // req: S, fd: NonEmpty.type
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用签名实现该功能的失败尝试def assertNonNegative[S <: IntTree](t: S): S。除了将签名更改为 之外def assertNonNegative(t: IntTree): IntTree,我找不到实现它的方法。

示例的相关性:
在“Scala 中的函数式编程原则”课程中关于子类型和泛型 (4.4) …

generics tree scala pattern-matching type-bounds

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