这是一种循环依赖吗?


class foo{
Bar b;
}
class bar{
Class clazz = foo.class;
}

上面的代码片段是否显示了循环依赖关系。类 foo 具有柱类对象的引用。类栏引用了 foo 类本身。

虽然细节可能因您使用的语言而略有不同,但在更纯粹的面向对象术语中,没有。

看看像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 instancebar instancebar instancefoo class。在纯 OO 中,foo classfoo instances的工厂,类方法不能引用实例方法,但反之亦然,因此foo instances可以依赖于foo class,但不能依赖于相反。

因此,在这个人为的示例中,foo instance是依赖树的头部,而foo class是尾部。如果不是在 clazz 实例变量中引用 Foo 类,而是引用了一个foo instance,那么你将有一个循环依赖关系图

相关内容

  • 没有找到相关文章

最新更新