小编Gaë*_*l J的帖子

如何修复此错误:对象类型中的方法 toString() 不适用于参数?

我创建了一个数字数组。现在我希望该数组显示在输出中,所以我使用了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)

java

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

Scala 3 宏特征参数

这是基本设置:

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 子句中使用的特征的参数的东西。

scala scala-macros scala-3

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

从 StringBuilder 转换为 String 的正确方法是什么?

从我在网上看到的情况来看,人们似乎建议使用 toString() 方法,但是文档指出:

创建此对象的字符串表示形式。默认表示取决于平台。在 java 平台上,它是类名、“@”和十六进制对象的哈希码的串联。

所以看起来使用这种方法可能会导致一些问题?

还有 mkString 和 result()。后者似乎最有意义。但我不确定这 3 种方法之间的区别是什么,以及是否应该使用 result() 。

stringbuilder scala

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

Why does the signature of groupBy contain only one generic?

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 ?

scala

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

Java 字符串池是否存储重复的文字?

正如我所理解的,每当我们创建一个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应该是相等的。

但是代码显示它们是不平等的。如果有人可以解释,将不胜感激。

java string

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

Scala 3 中特征可以有辅助构造函数吗?

我从辅助类构造函数文章中复制了以下代码,粘贴到 Scastie 中,更改classtrait并将 Scala 版本设置为 3.1.0:

\n
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}\n
Run Code Online (Sandbox Code Playgroud)\n

这是结果。它给出以下错误: …

scala scala-3

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

scala:如何将匿名函数转换为 val

我是一个学习 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)

任何帮助表示赞赏谢谢!

scala

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

字符串的 Gzip 压缩在 java11 与 java17 中给出不同的结果

我对字符串应用了 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)

java gzip scala java-17

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

初始化后分支和提交的状态是什么?

根据文档,当我跑步时git init,“将创建一个没有任何提交的初始分支”。但是当我运行git branch查看所有本地分支时,主/主分支不会出现。我想知道这是为什么。

另外,假设我在 main 的基础上创建了一个分支。所以在 init 之后,我做了一个git checkout -b myBranch. 考虑到还没有提交,这个分支现在指向哪里?它是否具有与 main 相同的指针值(即可能是某个空值),或者它实际上指向主分支本身?在这种情况下,当我从 myBranch 创建提交时,myBranch 现在是否指向该提交仍然以某种方式引用 main ?

git

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

Scala 迭代器在 size 之后调用下一个不会引发错误

使用 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

我在这里缺少什么?

iterator scala

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

标签 统计

scala ×7

java ×3

scala-3 ×2

git ×1

gzip ×1

iterator ×1

java-17 ×1

scala-macros ×1

string ×1

stringbuilder ×1