我创建了一个数字数组。现在我希望该数组显示在输出中,所以我使用了System.out.println.
但如果我们这样做,数组将不会显示,因此我们必须在显示它之前将数组转换为字符串。为此,我们可以使用Arrays.toString()函数。
它显示以下错误:
toString()类型中的方法Object不适用于参数?
下面是我要执行的代码:
public class Arrays {
public static void main (String[] args) {
int[] array1 = new int[] {1, 2, 3};
System.out.println((Arrays.toString(array1);
}
}
Run Code Online (Sandbox Code Playgroud) 这是基本设置:
trait MyProduct[A, B](a: A, b: B)
class X
class Y
class XxY(x: X, y: Y) extends MyProduct(x,y)
Run Code Online (Sandbox Code Playgroud)
我正在尝试检查该MyProduct特征的论据。更具体地说,我想提取一些信息,例如字符串“x”和“y”,它们指示 的哪些字段XxY传递给MyProduct.
重要的是,我需要满足具有相同类型的多个字段的情况,例如class XxYxY(x: X, y1: Y, y2: Y) extends MyProduct3(x, y1, y2),因此从类型参数进行推理是不够的。
我想也许问题是我还没有找到一种方法来为条款extends本身添加符号。我可以找到ClassDeffor XxY,从中我可以提取parents并获取已经构造的类型MyProduct[X,Y]。我还查看了symbol.declarations封闭模块和XxY.<init>函数的 ,以查看是否有可用于查找参数的数据,但这些似乎都没有我正在寻找的信息。
查看封闭模块的树让我认为这些信息可能被删除,而是需要从源代码解析为文本,但我希望有人有更好的解决方案。
从评论中编辑:
作为输入,我有一个Type封闭对象/模块的实例。例如:
trait MyProduct[A, B](a: A, b: B)
class X
class Y
class XxY(x: X, y: Y) extends MyProduct(x,y)
Run Code Online (Sandbox Code Playgroud)
作为输出,我想要一些允许我检查 extends 子句中使用的特征的参数的东西。
从我在网上看到的情况来看,人们似乎建议使用 toString() 方法,但是文档指出:
创建此对象的字符串表示形式。默认表示取决于平台。在 java 平台上,它是类名、“@”和十六进制对象的哈希码的串联。
所以看起来使用这种方法可能会导致一些问题?
还有 mkString 和 result()。后者似乎最有意义。但我不确定这 3 种方法之间的区别是什么,以及是否应该使用 result() 。
This is the method signature:
groupBy[K](f: (A) ? K): immutable.Map[K, Repr]
Run Code Online (Sandbox Code Playgroud)
Shouldn't the following:
groupBy[A, K](f: (A) ? K): immutable.Map[K, Repr]
Run Code Online (Sandbox Code Playgroud)
be more appropriate since its taking a collection of A ?
正如我所理解的,每当我们创建一个String文字时,都会检查池中是否存在String具有相同值的任何现有内容。如果存在,则返回对其的引用。否则会创建一个新的文字。
由此,我明白池只包含非重复的String文字。
但我对以下代码的输出感到困惑:
String str1 = "Hello World";
String str2 = "Hello";
String str3 = str2+" World";
System.out.println(str3);
System.out.println(((str1 == str3) ? "equal":"unequal"));`
Run Code Online (Sandbox Code Playgroud)
由于str3正在评估 指向"Hello World"的池中已经存在的对象,因此应该str1分配对相同对象的引用str3,因此str1并且str3应该是相等的。
但是代码显示它们是不平等的。如果有人可以解释,将不胜感激。
我从辅助类构造函数文章中复制了以下代码,粘贴到 Scastie 中,更改class为trait并将 Scala 版本设置为 3.1.0:
val DefaultCrustSize = 12\nval DefaultCrustType = "THIN"\n\n// the primary constructor\ntrait Pizza (var crustSize: Int, var crustType: String) {\n\n // one-arg auxiliary constructor\n def this(crustSize: Int) = {\n this(crustSize, DefaultCrustType)\n }\n\n // one-arg auxiliary constructor\n def this(crustType: String) = {\n this(DefaultCrustSize, crustType)\n }\n\n // zero-arg auxiliary constructor\n def this() = {\n this(DefaultCrustSize, DefaultCrustType)\n }\n\n override def toString = s"A $crustSize inch pizza with a $crustType crust"\n\n}\nRun Code Online (Sandbox Code Playgroud)\n这是结果。它给出以下错误: …
我是一个学习 scala 并研究匿名函数和值的初学者。我无法转换{case e if e % 2 == 0 => e}为 Val。我尝试了不同的语法(如下所示的示例)但无济于事。转换为 val 没有真正的目的;只是想获得更深入的了解。
package exercises.functions
object CollectVal extends App {
println(List(1,2,3,4,5).collect{case e if e % 2 == 0 => e})
// val onlyEvens: Int = e:Int => Int = e if (e % 2 == 0 ) => e
// val onlyEvens = e:Int = {case e if e % 2 == 0 => e}
println(List(1,2,3,4,5).collect{onlyEvens})
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏谢谢!
我对字符串应用了 gzip 压缩test-string。当我将 Scala 2.13.8 与Java 11.0.13(Java HotSpot(TM) 64 位服务器 VM)一起使用时,会产生压缩字符串H4sIAAAAAAAAACtJLS7RLS4pysxLBwCFdJByCwAAAA==.
然而,当我在Java 17.0.4.1(OpenJDK 64 位服务器 VM)上使用 Scala 2.13.8 执行相同的压缩操作时,它会产生H4sIAAAAAAAA/ytJLS7RLS4pysxLBwCFdJByCwAAAA==.,这两个压缩字符串都正确解压缩以检索原始 string test-string。
我认为这可能取决于默认压缩级别等几个因素:Java 11 和 Java 17 之间的默认压缩级别可能有所不同,从而导致同一输入产生不同的输出。算法改进:Java 17 中的 Gzip 实现可能已经过优化,导致压缩结果不同。 内部实现细节:Gzip 压缩的内部实现细节在 Java 11 和 Java 17 之间可能发生了变化,影响了压缩输出。
这背后的原因可能是什么?我附上下面的代码。
val bos = new ByteArrayOutputStream("test-string".length)
val b64os = new Base64OutputStream(bos)
val gzip = new GZIPOutputStream(b64os)
gzip.write("test-string".getBytes("UTF-8"))
gzip.close()
val compressed = new String(bos.toByteArray, "UTF-8")
bos.close()
compressed.trim
Run Code Online (Sandbox Code Playgroud) 根据文档,当我跑步时git init,“将创建一个没有任何提交的初始分支”。但是当我运行git branch查看所有本地分支时,主/主分支不会出现。我想知道这是为什么。
另外,假设我在 main 的基础上创建了一个分支。所以在 init 之后,我做了一个git checkout -b myBranch. 考虑到还没有提交,这个分支现在指向哪里?它是否具有与 main 相同的指针值(即可能是某个空值),或者它实际上指向主分支本身?在这种情况下,当我从 myBranch 创建提交时,myBranch 现在是否指向该提交并仍然以某种方式引用 main ?
使用 Scala 2.13.10 的本地解释器我运行以下代码
scala> val it = Iterator("a", "number", "of", "words")
val it: Iterator[String] = <iterator>
scala> it.size
val res0: Int = 4
scala> it.next()
val res14: String = a
Run Code Online (Sandbox Code Playgroud)
我假设运行命令 it.size 将遍历迭代器,并且 it.next() 将失败,正如 Scala 文档中所述
it.size 它返回的元素数量。注意:此操作结束!
https://docs.scala-lang.org/overviews/collections-2.13/iterators.html
我在这里缺少什么?