簡體   English   中英

Scala和Java泛型-類型不匹配錯誤

[英]Scala and Java Generics - Type Mismatch Error

有此簽名的方法:

public List<? extends TagNode> getElementListByName(String findName, boolean isRecursive) {
        return getElementList(new TagNodeNameCondition(findName), isRecursive);
}

在Scala中,我使用了如下方法:

val anchorNodes = bodyNode.getElementListByName("a", true)

並編寫了一個函數來過濾掉所有帶有此簽名的錨標簽:

def buildArticleLinksList(anchorTags: List[TagNode]): List[TagNode] = {
        @tailrec def buildArticlesList(articleLinksList: List[TagNode], anchorTags: List[TagNode]): List[TagNode] = anchorTags match {
            case Nil => articleLinksList
            case anchorTag :: tail if(anchorTag.getAttributeByName("href").contains(relativeCheckStr)) => buildArticlesList(articleLinksList:::List(anchorTag), tail)
        }

        buildArticlesList(List(), anchorTags)
}

但我收到一條錯誤消息,內容如下:

Type mismatch, expected: List[TagNode], actual: List[_ <: TagNode]

有人可以為我解釋一種聲明我的函數的方法,該函數允許我實際傳入的類型,這有點令人困惑。

將Java列表轉換為Scala的列表,並且可以正常工作。

編輯

盡管我應該包括導入和代碼,但是一旦我更仔細地閱讀了錯誤,它就很容易解決。

要修復它,我基本上是這樣導入JavaConverters的:

import scala.collection.JavaConverters._

然后,我將Java列表轉換為Scala列表,如下所示:

val anchorNodes = bodyNode.getElementListByName("a", true).asScala.toList

這里的問題是, asScala會將Java列表映射到與Scala等效的Buffer,因此我們可以將其轉換為Scala列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM