这是一个循环依赖

Is this a cyclic dependency

class foo{
Bar b;
}

class bar{
Class clazz = foo.class;
}

上面的代码片段是否显示了循环依赖。 Class foo 引用了 bar class 对象。 Class bar 引用了 foo class 本身。

虽然根据您使用的语言,具体细节可能会略有不同,但在更纯粹的面向对象的术语中,不。

查看 Ruby 等受 Smalltalk 启发的语言可能会有所帮助,以了解情况如何:

class Foo
    def initialize()
        @b = Bar.new()
    end
    def what_is_b() # instance method can call class method who
        @b.who()
    end
    def who()
        "foo instance"
    end
    def self.who() # class method can't call instance method what_is_b
        "foo class"
    end
end

class Bar
    def initialize()
        @clazz = Foo
    end
    def what_is_clazz()
        @clazz.who()
    end
    def who()
        "bar instance"
    end
    def self.who()
        "bar class"
    end
end

f = Foo.new()
puts f.who()
puts f.what_is_b()

puts " and "

b = Bar.new()
puts b.who()
puts b.what_is_clazz()

这输出:

foo instance
bar instance
 and 
bar instance
foo class

这表明 foo instance 有一个 bar instance,而 bar instance 有一个 foo class。在纯 OO 中,foo classfoo instances 的工厂,而 class 方法不能引用实例方法,但反之亦然,因此 foo instances 可以依赖于 foo class 但反之则不然。

所以在这个人为的例子中,foo instance 是依赖树的头部,而 foo class 是尾部。如果不是在 clazz 实例变量中引用 Foo class 你引用了一个 foo instance 你将有一个循环依赖图