java - 如何在泛型中实现空对象模式?

标签 java generics design-patterns null

我喜欢 null object pattern 的想法并强制我使用它,直到它真正感觉正常和良好为止。目前我不知道如何在泛型类型中使用它。我知道定义第二个泛型类型并传入类以构造默认对象的可能性,但是对于这种模式来说,这确实感觉开销太大了。有什么好的方法吗?

public class GenericExample<T> {
    public static final GenericExample NULL = ???;

    private T attribute;

    public GenericExample(T attribute) {
        this.attribute = attribute;
    }
}

public class HoldGeneric {
    private GenericExample<String> name = GenericExample.NULL;

    public initLater(String name) {
        this.name = new GenericExample<String>(name);
    }
}

最佳答案

您可以按照 JDK 的做法,使用静态方法来推断泛型类型并进行未经检查的转换。

java.util.Collections 为空列表和集合实现 Null 对象。在 Java Pre-generics 中,有一个公共(public)静态字段。

public static final List EMPTY_LIST = new EmptyList();

后泛型: 现在有一些静态方法可以推断泛型类型并执行未经检查的转换,以便您将其转换为正确的类型。类型并不重要,因为集合是空的,但它会让编译器满意。

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

关于java - 如何在泛型中实现空对象模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326901/

相关文章:

java - 如何制作包含多个类的 .jar 文件?

generics - 类型参数支持加法的通用接口(interface)

java - 在 java 房间中使用 Generic Dao 时出现错误

c# - 将域服务实现为存储库的扩展方法

database - 大规模、基于时间序列的聚合操作的架构和模式

zend-framework - 使用 Doctrine 2 和 Repositories,服务层的目的是什么?

java - Swing的KeyListener和多个按键同时按下

java - JmsTemplate批量问题

java - 为什么 ANDing 数字会在有符号和无符号表示之间转换?

c# - 通用代理类