Scala:型パラメーターなしでscalaの「型付き」クラスを含むJavaインターフェースを実装する方法

OmriManor

これはトリッキーなものです-私はscalaに実装したいJavaインターフェースを持っています:

public interface Foo {
  public void bar(scala.Array arr);
}

Scalaで実装することさえ可能ですか?私が試してみると:

class FooImpl extends Foo {
  override def bar(arr: Array[_]): Unit = ???
}

私は得る:

Error:(13, 7) class FooImpl needs to be abstract, since method bar 
in trait Foo of type (x$1: Array)Unit is not defined
(Note that Array does not match Array[_]. To implement a raw type, use 
Array[_])
class FooImpl extends Foo {
アレクセイロマノフ

エラーメッセージは、Array(もちろん、名前を置き換えた後)以外のジェネリック型に対する答えを示しています

raw型を実装するには、 Array[_]

「生の型」は、Javaが型パラメーターなしで使用されるジェネリック型と呼ぶものであり、たとえばhttps://docs.oracle.com/javase/tutorial/java/generics/rawTypes.htmlは、現在、Java-5より前のコードはひどく時代遅れになっています。したがって、それがすべてのオプションである場合は、最初にJavaインターフェイスを修正する必要があります。

さて、なぜこれが機能しないのArrayですか?これは特別なタイプであり、実際にはコンパイラに組み込まれています。そのインスタンスは実際のJVM配列であり、Javaでは一般的なタイプはありません。したがって、Scalaコードで使用される場合、コンパイルされたバイトコードはまったく使用さscala.Arrayません静的メソッドをそこに配置するのは(egscala.Anyとは異なりscala.NullJVMタイプとしてのみ存在すると思いますが、すべてのインスタンスメソッドはとして定義されていthrow new Error()ます。エラーメッセージはこのユニークなケースを考慮に入れていなかったようです。

つまり、答えは次のとおりです。いいえ、私が知る限り、Scalaでは実装できません。ただし、Javaでも簡単に実装することはできません。また、些細な実装であっても、それを使用してコード記述しようとすると、同じ問題が発生ます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

型パラメーターなしでインターフェースを実装するクラスをコンパイルできません

分類Dev

関数型のパラメーターが、パラメーターが元のパラメーターのインターフェースを実装する引数を取ることができないのはなぜですか?

分類Dev

Scalaで特定の型なしでComparableを拡張するJavaインターフェースを実装する方法は?

分類Dev

エクスポートされないパラメーター型を含むメソッドを使用したインターフェースの実装(Java 9モジュール)

分類Dev

Java:型パラメーターはインターフェースを実装する必要があります

分類Dev

JavaからJavaインターフェースを実装するScalaクラスを使用できますか?

分類Dev

Java:内部列挙型を含むインターフェース。実装クラスの機能を拡張する

分類Dev

インターフェイスメソッドのパラメータをクラス実装ごとに具象型にするように強制します

分類Dev

インターフェイスを実装するジェネリック型パラメーターを使用して、さまざまな型のインスタンスをボックス化解除する

分類Dev

共変型のScalaパラメーター化クラス内にメソッドを実装する

分類Dev

Clojureで具象型パラメーターを使用してインターフェースを実装する方法は?

分類Dev

パラメータ化されたインターフェイスを実装する型のKotlin Pass

分類Dev

Java Generics:実装クラスの型引数を受け取るインターフェースメソッド

分類Dev

Typescriptのインターフェース/クラス実装では決して型を使用しない

分類Dev

パラメータ付きのジェネリックパラメータを含むListを使用してメソッドを実装する方法

分類Dev

パラメーターなしのコンストラクターの型をチェックする方法は?

分類Dev

パラメーターなしのコンストラクターの型をチェックする方法は?

分類Dev

Scala型クラスインターフェース構文を理解する

分類Dev

2つのJavaインターフェースを実装するScalaクラス-どのように?

分類Dev

Kotlinでラムダとして関数型インターフェースを実装する方法は?

分類Dev

Scalaのクラスメソッドを介して型パラメーターを転送する方法は?

分類Dev

2つのジェネリック型を持つ1つのインターフェースを実装するJavaクラスを作成する方法は?

分類Dev

ScalaでJavaインターフェースを匿名で実装する方法は?

分類Dev

PHPクラスは、実装しているインターフェイス型のオブジェクトを返すことができますか?

分類Dev

angle2クラスのインターフェースを使用して列挙型を実装する方法がわからない

分類Dev

Coqで既存の型付きコンストラクターの等価性を実装するための型のパターンマッチング

分類Dev

インターフェースを実装するクラスがJavaのインターフェースと同じ型としてカウントされないのはなぜですか?

分類Dev

列挙型を含むケースクラスの暗黙的な書き込みまたはフォーマットを実装する方法を再生します

分類Dev

deftypeを使用した型パラメーターを使用したジェネリックインターフェイスの実装

Related 関連記事

  1. 1

    型パラメーターなしでインターフェースを実装するクラスをコンパイルできません

  2. 2

    関数型のパラメーターが、パラメーターが元のパラメーターのインターフェースを実装する引数を取ることができないのはなぜですか?

  3. 3

    Scalaで特定の型なしでComparableを拡張するJavaインターフェースを実装する方法は?

  4. 4

    エクスポートされないパラメーター型を含むメソッドを使用したインターフェースの実装(Java 9モジュール)

  5. 5

    Java:型パラメーターはインターフェースを実装する必要があります

  6. 6

    JavaからJavaインターフェースを実装するScalaクラスを使用できますか?

  7. 7

    Java:内部列挙型を含むインターフェース。実装クラスの機能を拡張する

  8. 8

    インターフェイスメソッドのパラメータをクラス実装ごとに具象型にするように強制します

  9. 9

    インターフェイスを実装するジェネリック型パラメーターを使用して、さまざまな型のインスタンスをボックス化解除する

  10. 10

    共変型のScalaパラメーター化クラス内にメソッドを実装する

  11. 11

    Clojureで具象型パラメーターを使用してインターフェースを実装する方法は?

  12. 12

    パラメータ化されたインターフェイスを実装する型のKotlin Pass

  13. 13

    Java Generics:実装クラスの型引数を受け取るインターフェースメソッド

  14. 14

    Typescriptのインターフェース/クラス実装では決して型を使用しない

  15. 15

    パラメータ付きのジェネリックパラメータを含むListを使用してメソッドを実装する方法

  16. 16

    パラメーターなしのコンストラクターの型をチェックする方法は?

  17. 17

    パラメーターなしのコンストラクターの型をチェックする方法は?

  18. 18

    Scala型クラスインターフェース構文を理解する

  19. 19

    2つのJavaインターフェースを実装するScalaクラス-どのように?

  20. 20

    Kotlinでラムダとして関数型インターフェースを実装する方法は?

  21. 21

    Scalaのクラスメソッドを介して型パラメーターを転送する方法は?

  22. 22

    2つのジェネリック型を持つ1つのインターフェースを実装するJavaクラスを作成する方法は?

  23. 23

    ScalaでJavaインターフェースを匿名で実装する方法は?

  24. 24

    PHPクラスは、実装しているインターフェイス型のオブジェクトを返すことができますか?

  25. 25

    angle2クラスのインターフェースを使用して列挙型を実装する方法がわからない

  26. 26

    Coqで既存の型付きコンストラクターの等価性を実装するための型のパターンマッチング

  27. 27

    インターフェースを実装するクラスがJavaのインターフェースと同じ型としてカウントされないのはなぜですか?

  28. 28

    列挙型を含むケースクラスの暗黙的な書き込みまたはフォーマットを実装する方法を再生します

  29. 29

    deftypeを使用した型パラメーターを使用したジェネリックインターフェイスの実装

ホットタグ

アーカイブ