Как переопределить метод varargs java в классе Scala, который по -прежнему вызывает как в Scala, так и в Java variadily?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как переопределить метод varargs java в классе Scala, который по -прежнему вызывает как в Scala, так и в Java variadily?

Сообщение Anonymous »

Предположим, что в библиотеке Java есть базовый класс, который не может быть изменен < /p>

Код: Выделить всё

public class BaseClass {
public Something function(int... args){ ... }
}
< /code>
Обычно это было бы переопределено в Scala с помощью синтаксиса Scala varargs: < /p>
class TypicalScalaVarargsOverrideClass extends BaseClass {
override def function(args: Int*): Something = { ... }
}
Но если типичный scalavarargsoverrideclass.function вызывается в коде Java, не поднимается подходящая ошибка метода:

Код: Выделить всё

// no args
no suitable method found for function(no arguments)
method TypicalScalaVarargsOverrideClass.function(scala.collection.Seq) is not applicable
(actual and formal argument lists differ in length)
method TypicalScalaVarargsOverrideClass.function(int[]) is not applicable
(actual and formal argument lists differ in length)

// 1 arg
no suitable method found for function(int)
method TypicalScalaVarargsOverrideClass.function(scala.collection.Seq) is not applicable
(argument mismatch; int cannot be converted to scala.collection.Seq)
method TypicalScalaVarargsOverrideClass.function(int[]) is not applicable
(argument mismatch; int cannot be converted to int[])

// 3 args
no suitable method found for function(int,int,int)
method TypicalScalaVarargsOverrideClass.function(scala.collection.Seq) is not applicable
(actual and formal argument lists differ in length)
method TypicalScalaVarargsOverrideClass.function(int[]) is not applicable
(actual and formal argument lists differ in length)
Обычно решение для этого состоит в том, чтобы добавить аннотацию @varargs , что создает байт-код, сгенерированный из кода Scala, java:
class UsingVarargsAnnotationClass extends BaseClass {
@varargs
override def function(args: Int*): Something = { ... }
}
< /code>
Но это приводит к ошибке двойного определения, поскольку теперь она сталкивается с исходным определением функции: < /p>
double definition:
override def function(args: Int*): Something at line 1 and
override def function(args: Array[Int]): Something at line 3
have same type after erasure: (args: Array[Int])Something
override def function(args: Int*): Something = {
< /code>
Так есть ли способ, в Scala (в частности 2,12 или 2.13), чтобы определить переопределение метода Java varargs, который все еще можно вызвать как из Scala, так и от Java? определено в Scala (есть несколько способов сделать это).


Подробнее здесь: https://stackoverflow.com/questions/796 ... callable-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»