2012-02-14 19 views
0

私はjavaを初めて利用しています。私はマップが別のマップの内側にあるパラメータを渡そうとしていますが、 "識別子が期待されました"というエラーが表示されます(int、必須の参照が見つかりました)。地図内の地図java

これはコードです:

package learning; 
import java.util.*; 
import java.text.SimpleDateFormat; 

    public interface Policy { 

     public void toggleApp(Map<Map<Appliance,SimpleDateFormat>,int>toggle); *error here* 

    } 

    class Appliance 
    { 
     String appName = ""; 
     int appID; 
     double demand = 0.0; 

    } 
+0

シンプルなタイプのキーとしてマップ? – UmNyobe

+2

'int'ではなく' Integer'を試してください。 –

答えて

4

ジェネリッククラスのタイプパラメータとして、プリミティブタイプ(intなど)を指定することはできません。

Map<Map<Appliance,SimpleDateFormat>,Integer> 
            ^^^^^^^ 

変更

Map<Map<Appliance,SimpleDateFormat>,int> 
            ^^^ 

また、第一のタイプの引数はキーのタイプであり、第二型パラメータは値のタイプであることに注意し 。私の直感は、あなたのコードでそれらを入れ替えたかもしれないということです。

さらに読書:

1

あなたは(intのような)プリミティブ型に(Map<K,V>のような)ジェネリックをparametriseすることはできません。代わりにIntegerのようなラッパークラスを使用してみてください:

1

変更intIntegerに。

ジェネリックスは参照型のみをパラメータとして受け入れることができます。

2

問題はintが地図の価値タイプです! intはプリミティブであり、Javaジェネリックスは参照型でのみ機能します。

Integerに置き換えてください:-)。

Javaにはauto boxing/unboxingがあるので、通常の操作を使用できます。intIntegerに自動的に変換します。 map.put(key, 1)が動作します。それはInteger.intValue(1)となり、それはIntegerです。

0

あなたはMapint(プライマリータイプ)を持つことができない、それだけでObjectsを受け入れる:

Map<Map<Appliance,SimpleDateFormat>, Integer > toggle;