У меня есть эти классы в библиотеке:Passing `Comparable` Scala массив Java универсального метода
// This is java
public abstract class Property<T extends Comparable<T>> {
public static Property<T> create(String str) { /* Some code */ }
}
public class PropertyInt extends Property<Integer> {
public static PropertyInt create(String str) { /* Some code */ }
}
public class PropertyDouble extends Property<Double> {
public static PropertyDouble create(String str) { /* Some code */ }
}
и есть метод, который принимает список Property
с, что я хочу использовать:
public void state(Property... properties) {
/* some code */
}
Я не могу изменить выше, так как они из библиотеки. В Скале, у меня есть следующий код, который пытается передать массив void state(Property...)
:
// This is scala
val propertyInt = PropertyInt.create("index")
val propertyDouble = PropertyDouble.create("coeff")
state(Array[Property](proeprtyInt, propertyDouble)))
Последняя строка кода имеет ошибку: Type mismatch, expected Property[_ <: Comparable[T]], actual Array[Property]
Как это исправить?
Примечание: Это упрощенная версия более сложного кода. В реальном коде Property<T extends Comparable<T>>
реализует интерфейс IProperty<T extends Comparable<T>>
и IProperty
принимается за аргументы для state
.
Edit: Следующий
val properties = Array(propertyInt.asInstanceOf[IProperty[_ <: Comparable[_]]],
propertyDouble.asInstanceOf[IProperty[_ <: Comparable[_]]])
state(properties)
дает ошибку
Error:(54, 33) type mismatch;
found : Array[Property[_ >: _$3 with _$1 <: Comparable[_]]] where type _$1 <: Comparable[_], type _$3 <: Comparable[_]
required: Property[?0] forSome { type ?0 <: Comparable[?0] }
state(properties)
^
Я не могу изменить код для 'state'. Это из библиотеки. –
@HenryW., Можете ли вы создать вспомогательный метод в своем java-коде, который принимает свойство «> ...» и возвращает 'Property []'? – Aivean
@HenryW., На самом деле, неважно, см. Обновление. – Aivean