我正在尝试启用字体连字:
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<TextAttribute, ?>
(包含任意类型的值)从而尝试以下操作:
Map<TextAttribute, ?> attrs = font.getAttributes();
attrs.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON);
font = font.deriveFont(attrs);
现在编译器发出一个错误:
error: incompatible types: Integer cannot be converted to CAP#1
所以第一个参数是typechecked,我不希望对第二个参数进行typecheck(我们使用的是 ?
毕竟在这里——任何事情都有可能发生,这就是这张Map的重点)。
有没有办法取悦编译器的排版员?请注意,我不能更改api,也许有一种方法可以说 I know what I am doing here
?
1条答案
按热度按时间wixjitnu1#
deriveFont()
将保留现有属性,因此您不必这样做getAttributes
第一。下面的代码片段显示了它。
理想情况下,如果希望客户机向集合添加条目,则该集合将不具有参数类型
?
.但在这种情况下,如果出现这种情况,我能想到的最佳选择是强制转换返回类型并抑制警告,如下所示:
谢谢