Scala'da Java arabiriminin uygulanması uyumsuz tür eşlemesiyle sonuçlanır

0

Soru

Scala'da uygulamak istediğim bir Java arayüzüm var. Arayüz aşağıdaki yöntem bildirimini içerir:

 List<Map<String, Object>> xyz(Map<String, Object> var1, Map<String, Object> var2);

Scala uygulamam şu şekildedir:

override def testComponent( input: java.util.Map[String, Object], metadata: java.util.Map[String, Object] )
  {

    val list: util.List[Map[String, AnyRef]] = new util.ArrayList[Map[String, AnyRef]]

     return list
  }

HATA: xyz yöntemini özellik türünde geçersiz kılma (x$1: java.util.Map[String,Object], x$2: java.util.Map[String,Object])java.util.Liste [java.util.Harita [String, Nesne]]; testComponent yöntemi uyumsuz bir türe sahiptir def testComponent (girdi: java.util.Map[String, Object], meta veriler: java.util.Harita [String, Nesne] )

Ben sorunu tam olarak ne olduğunu bilmiyorum.

interface java scala scala-java-interop
2021-11-20 13:48:55
1

En iyi cevabı

3

Tanımınız testComponent türü vardır Unit çünkü (Scala'nın son sürümlerinde kullanımdan kaldırılmıştır) yordam sözdizimini kullanarak tanımlanmıştır. def name(args) { } (yani hayır = {). İlk önce derlemeyi geçirir, çünkü Scala bir değerin atılmasına izin verir Unit beklenir (bu davranış derleyici seçeneğiyle bir uyarı yapılabilir -Ywarn-value-discard). Bu yöntem, değeri de dahil olmak üzere tarafından çağrılacak istediğiniz açık olduğum için bunu çözebilir =.

override def testComponent(input: java.util.Map[String, Object], metadata: java.util.Map[String, Object]) = {
  val list: util.List[Map[String, AnyRef]] = new util.ArrayList[Map[String, AnyRef]]
  list  // return should be avoided in Scala: it's not necessary and can introduce some really subtle bugs
}

Genel bir yöntemin sonuç türü hakkında açık olmak genellikle iyi bir fikirdir. Alternatif olarak, bu da çalışmalıdır:

override def testComponent(input: java.util.Map[String, Object], metadata: java.util.Map[String, Object]) =
  new ArrayList[Map[String, AnyRef]]
2021-11-22 00:21:31

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................