2016-04-23 9 views
0

私は、ライブラリ内のこれらのクラスがあります。渡すスカラ `JavaのジェネリックメソッドにComparable`配列

// 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 */ 
} 

上記はライブラリからのものなので変更できません。 Scalaで は、私が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の引数となります。

編集:以下

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) 
     ^

答えて

0

を与えますが、一般的なことstate引数を変更することです:

public static void state(Property<?> ... properties) { 
    /* some code */ 
} 

次に、あなたが行うことができます。

// This is scala 
val propertyInt = PropertyInt.create("index") 
val propertyDouble = PropertyDouble.create("coeff") 

state(propertyInt, propertyDouble) 

state(Array(propertyInt, propertyDouble):_*) 

UPDあなたがstateの署名を変更することができない場合、あなたはまだ、このようにそれを呼び出すことができます。

state(Array[Property[_]](propertyInt, propertyDouble):_*) 
+0

私は 'state'のコードを変更することはできません。それは図書館からのものです。 –

+0

@HenryW。、あなたは 'Property ...'をとり、 'Property []'を返すあなたのJavaコードでヘルパーメソッドを作成できますか? – Aivean

+0

@HenryW。、実際には、気にしないで、アップデートを見てください。 – Aivean

関連する問題