gpt4 book ai didi

java - 对象方法调用可以和对象实例化同时进行吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:00:39 25 4
gpt4 key购买 nike

我正在尝试使用 java 类 BitSet 作为自定义类的字段。我希望该类使用默认的 BitSet 并设置所有位。

import java.util.BitSet;

public class MyClass {
private BitSet mask;

public MyClass() {
this(new BitSet(4));
// want to set all bits first
// something like
// this( new BitSet(4).set(0,3) );
}

public MyClass(BitSet mask) {
this.mask = mask;
}
}

默认情况下,BitSet 构造函数取消设置所有位。所以在我将它作为匿名对象发送之前,我想调用 set(int, int) 方法来设置所有位。我知道我可以简单地将字段 mask 初始化为一个新的 BitSet,然后从那里调用 set(int, int) 方法。

但是,一般来说,我想知道是否可以在对象实例化时访问实例方法?

最佳答案

为什么不编写一个单独的构造函数来允许 BitSet 初始化?使用 Java 8,这看起来像这样:

public class MyClass {
private BitSet mask;
public MyClass() {
this(new BitSet(4),(m)->m.set(0,3));
}
public MyClass(BitSet mask,Consumer<BitSet> initializer) {
initializer.accept(mask);
this.mask = mask;
}
}

您甚至可以通过引入带有类型参数的静态方法来使其更加通用:

public static <T> T initialize(T t,Consumer<T> initializer) {
initializer.accept(t);
return t;
}

在那种情况下,早期的 MyClass 将如下所示:

public class MyClass {
private BitSet mask;
public MyClass() {
this(initialize(new BitSet(4),(m)->m.set(0,3)));
}
public MyClass(BitSet mask) {
this.mask = mask;
}
}

更新

还有另一种方法,无需引入新方法或构造函数:

public class MyClass {
private BitSet mask;
public MyClass() {
this(new BitSet(4) {{ set(0,3); }});
}
public MyClass(BitSet mask) {
this.mask = mask;
}
}

anonymous class正在通过扩展 BitSet 并添加 instance initialization block 来实例化,因此 double curly braces .

关于java - 对象方法调用可以和对象实例化同时进行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36806353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com