2011-08-15 14 views
4

私はJDK1.6がジェネリック型パラメータ化について(エラーは単に警告なし)文句を言い、この方法は、地図で使用されていないしていると...:フォント属性の汎用マップはどのように指定できますか?

public static Font getStrikethroughFont(String name, int properties, int size) 
    { 
     Font font = new Font(name, properties, size); 

     Map attributes = font.getAttributes(); 
     attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); 
     Font newFont = new Font(attributes); 
     return newFont;    
    } 

は、それから私は、次のように変更しました
public static Font getStrikethroughFont2(String name, int properties, int size) 
    { 
     Font font = new Font(name, properties, size); 

     Map<TextAttribute, ?> attributes = font.getAttributes(); 
     attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); 
     Font newFont = new Font(attributes); 
     return newFont;    
    } 

しかし

attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); 

文は、もはや有効ではありません。

TextAttribute.STRIKETHROUGH_ONはブール値です。

上記の方法で汎用タイプ機能を使用するにはどうすればよいですか?私はコアJavaの本を見てきましたが、答えは見つかりませんでした。誰も私を助けることができますか?

Map<TextAttribute, Object> 

すべてのオブジェクトをスーパークラスとしてオブジェクトいるとあなたが、とにかく地図内の任意のプリミティブ型を置くことができない:私はよく質問を理解してきたわからないが、このことについてどのように

+0

マップに配置する値は、常に「TextAttribute」ですか? –

+0

どのような種類のエラーがスローされますか? http://download.oracle.com/javase/1.4.2/docs/api/java/util/Map.html#put(java.lang.Object、java.lang.Object) – Colin

答えて

8

あなたはどうあるべきか使用はfont.deriveFont(map)です。

public static Font getStrikethroughFont2(String name, int properties, int size) 
{ 
    Font font = new Font(name, properties, size); 
    Map<TextAttribute, Object> attributes = new HashMap<TextAttribute, Object>(); 
    attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); 
    Font newFont = font.deriveFont(attributes); 
    return newFont;    
} 

これは、ジェネリックの問題を解決します。派生フォントは古いフォントをコピーし、次にそれを指定した属性を適用します。したがって、コンストラクタFontを使用して同じことをしようとしています。

+0

+1です。 'Font'は特に – Bozho

0

。だからObjectでは、すべてを手に入れます!

+0

これはコンパイルされません。 'Font.getAttributes()'は 'Map 'を返します。 – Jeffrey

+0

@Dalshimこれは 'font.getAttributes()'にキャストを追加しなければならないことを意味し、コンパイラの警告を生成します。 – dogbane

+0

コンパイルされない点を除いて。 – OscarRyz

4

putは、そのマップにはありません。それは読書のためのものです。既存のマップを取得し、その属性+追加のものでフォントを作成し、使用する必要がある場合は、属性を入れて使用することができます

マップはMap<String, Object>

です:

Map<TextAttribute, Object> map = 
    new HashMap<TextAttribute, Object>(font.getAttributes()); 
+0

+1これは文脈に敏感ではない回答です(具体的にはジェネリックの問題に答えるなど)。 'deriveFont'はおそらくより良いオプションです。 –

+0

が真です。文脈に敏感な答えを得るために@jjnguyを+1しましたが、依然として参考のために鉱山を維持します。 – Bozho

+0

Hmmmので、興味深い 'Map 'の 'Map 'を構築することができます。 ( '+ 1') – jjnguy

関連する問題