Java Font.getTextAttributes映射错误:不兼容的类型:无法将整数转换为CAP#1

Java Font.getTextAttributes映射错误:不兼容的类型:无法将整数转换为CAP#1,java,generics,fonts,Java,Generics,Fonts,我正在尝试启用字体连字: Map attrs = font.getAttributes(); attrs.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON); font = font.deriveFont(attrs); 请注意,Map未进行类型检查,编译器会发出警告: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type Map 这

我正在尝试启用字体连字:

Map attrs = font.getAttributes();
attrs.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON);
font = font.deriveFont(attrs);
请注意,
Map
未进行类型检查,编译器会发出警告:

warning: [unchecked] unchecked call to put(K,V) as a member of the raw type Map
这是公平的,但我该怎么解决呢?
getAttributes
返回
Map
(保存任意类型的值),因此尝试以下操作:

Map<TextAttribute, ?> attrs = font.getAttributes();
attrs.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON);
font = font.deriveFont(attrs);
因此,第一个参数是经过类型检查的,我不希望对第二个参数进行类型检查(毕竟,我们在这里使用的是
——任何事情都可能发生,这就是这个映射的全部要点)

有没有办法取悦编译器类型检查器? 请注意,我无法更改API,可能有一种方法可以说
我知道我在这里做什么

deriveFont()
将保留现有属性,因此您不需要先执行
getAttributes

下面的代码片段显示了它

Font-Font=新字体(“信使”,普通字体,20);
System.out.println(font.getAttributes());//打印{family=“Courier”,重量=1.0*,宽度=1.0*,姿势=0.0*,大小=20.0,变换=null*,上标=0*,跟踪=0.0*[btx=null,ctx=null]}
HashMap attrs=新的HashMap();
attrs.put(texttribute.ligations,texttribute.ligations_ON);
font=font.deriveFont(属性);
System.out.println(font.getAttributes())//打印{family=“Courier”,重量=1.0*,宽度=1.0*,姿势=0.0*,大小=20.0,变换=null*,上标=0*,连字=1,跟踪=0.0*[btx=null,ctx=null]}

理想情况下,如果客户机希望向集合中添加条目,则它不会具有参数类型

但在这种情况下,如果出现这种情况,我能想到的最佳选择是强制转换返回类型并抑制警告,如下所示:

@SuppressWarnings({"unchecked"})
Map<TextAttribute, Object> attrs = (Map<TextAttribute, Object>) font.getAttributes();
attrs.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON);
font = font.deriveFont(attrs);
@SuppressWarnings({“unchecked”})
Map attrs=(Map)font.getAttributes();
attrs.put(texttribute.ligations,texttribute.ligations_ON);
font=font.deriveFont(属性);
谢谢

@SuppressWarnings({"unchecked"})
Map<TextAttribute, Object> attrs = (Map<TextAttribute, Object>) font.getAttributes();
attrs.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON);
font = font.deriveFont(attrs);