java 如何是用在构造函数里的 当在构造器里要调用自己的其_我可以在Java的构造函数中调用方法吗?...

我可以将方法readConfig()放入构造函数吗?

在构造函数中调用不可替代的方法是可以接受的方法。

如果该方法仅由构造方法使用,则您可能想知道是否确实需要将其提取到方法中(甚至putMapEntries())。

如果您选择将构造函数完成的某些逻辑提取到方法中,那么对于任何方法,您都必须选择适合该方法要求的访问修饰符,但在这种特定情况下,它对于防止该方法被覆盖是至关重要的。 必须冒使超类构造函数不一致的风险。

因此,如果仅由该类的构造函数(和实例方法)使用它,则应该为putMapEntries()。

否则,如果在包内或子类中重用此方法,则应同时为HashMap和Map。

这将给我一次打电话的好处,还是有另一种机制可以做到这一点?

使用这种方式没有任何好处或缺点。

我不鼓励在构造函数中执行很多逻辑,但是在某些情况下,在构造函数中初始化多件事可能很有意义。

例如,复制构造函数可能执行许多操作。

多个JDK类对此进行了说明。

以putMapEntries()复制构造函数为例,该构造函数构造一个新的HashMap,其映射与指定的Map参数相同:

public HashMap(Map extends K, ? extends V> m) {

this.loadFactor = DEFAULT_LOAD_FACTOR;

putMapEntries(m, false);

}

final void putMapEntries(Map extends K, ? extends V> m, boolean evict) {

int s = m.size();

if (s > 0) {

if (table == null) { // pre-size

float ft = ((float)s / loadFactor) + 1.0F;

int t = ((ft < (float)MAXIMUM_CAPACITY) ?

(int)ft : MAXIMUM_CAPACITY);

if (t > threshold)

threshold = tableSizeFor(t);

}

else if (s > threshold)

resize();

for (Map.Entry extends K, ? extends V> e : m.entrySet()) {

K key = e.getKey();

V value = e.getValue();

putVal(hash(key), key, value, false, evict);

}

}

}

提取在putMapEntries()中填充的地图的逻辑是一件好事,因为它允许:

在其他情况下重用该方法。 例如clone()和putAll()也使用它

(小但有趣)给出一个有意义的名称,以传达所执行的逻辑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值