java - 如何指定字体属性的通用映射?

标签 java generics

我有这个方法,jdk1.6 提示(没有错误只是警告)关于在 Map 中没有使用泛型参数化和......:

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 是 boolean 值。

如何在上述方法中使用通用类型功能?我看过 Core Java 这本书,但没有找到答案。任何人都可以帮助我吗?

最佳答案

你应该使用的是 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 构造函数执行的操作相同的操作。

关于java - 如何指定字体属性的通用映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067901/

相关文章:

java - 为什么使用 webflux 的 spring boot 测试会忽略自定义 jackson 模块

java - 为什么 hibernate 在更新事务期间调用删除?

java - 使用分区键查询cosmosdb

c# - List<T> 上的 Lambda 并使用反射获取属性名称

C#泛型继承问题

Java 添加到未知类型泛型列表

java - 如何验证没有使用 Mockito 调用特定方法?

java - 如何在 Java 8 中将 Map 转换为 List

java - 泛型中的通配符是对象还是对象的数据?

ios - Swift 泛型 - 更改值和在 View Controller 之间传递