方法一
AppMain.java
A obja = new A(new B());
RandomClass.java
B b;
pubic A(B b){
this.b = b;
}
方法 2
AppMain.java
B objb = new B();
A obja = new A(objb);
RandomClass.java
//same code
方法 1 和方法 2 相同吗?
答案 0 :(得分:1)
除了一个细微的区别之外,这两种方法是相同的(除了在第一种方法中您需要 SELECT -- DISTINCT ON (p.id)
'plan_progress' AS EVENT_TYPE
, '-1' AS EVENT_VALUE
, extract(EPOCH FROM p.created_at) AS CREATION_TIMESTAMP
FROM plans p
WHERE p.status = 'ENDED' AND p.continuous IS NOT TRUE
AND EXISTS(
select *
FROM schedules s
WHERE s.plan_id = p.id
AND s.status = 'DONE'
) ;
而不是 new A(new B())
)。不同之处在于,在第二种方法中,您最终会得到对提供给 new A(new B)
构造函数的 objb
对象的单独引用(变量 B
)。
答案 1 :(得分:0)
src/Memoizer.ts:11:31 - error TS2304: Cannot find name 'WeakRef'.
11 MemoCache.map.set(id, new WeakRef(o));
~~~~~~~
src/Memoizer.ts:15:32 - error TS2304: Cannot find name 'WeakRef'.
15 static map = new Map<string, WeakRef>();
~~~~~~~
是编译器错误。因此,方法 1 失败了,方法 2 不会——它们不一样。
如果您打算将其设为 new B
,但您在发布问题时有点粗心 - 那么这些是完全相同的。 new B()
表示:创建一个新的 B 对象,然后这个表达式的计算结果是一个指向这个新创建的对象的引用。然后使用 new B()
将此引用的副本传递给 A 构造函数。使用 new A(new B())
,您可以将此引用的副本分配给局部变量,然后调用 A 构造函数,将此引用的副本传递给它。
换句话说,这归结为完全相同的事情。