首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何对构造函数中的公共初始化进行分组?

如何对构造函数中的公共初始化进行分组?
EN

Stack Overflow用户
提问于 2017-10-02 23:55:52
回答 3查看 43关注 0票数 0

我正在用Java编写一个Android应用程序。我的类有两个构造函数-一个是直接传递数据时使用的,另一个是if类应该从包中反序列化数据。每件事看上去都更像以下几点:

代码语言:javascript
运行
AI代码解释
复制
public class MyClass {

    private final ObservableInt myField;
    private final int data;

    public MyClass(int data) {

        myField = new ObservableInt();
        myField.addOnChangedListener(myListener);

        this.data = data;
    }

    public MyClass(Bundle bundle) {

        myField = new ObservableInt();
        myField.addOnChangedListener(myListener);

        this.data = bundle.getInt("SomeName");
    }
}

考虑上面这个简单的例子。我有更多的最后字段要填充,还有更多的data-type字段。

现在请注意,此代码在每个构造函数中重复:

代码语言:javascript
运行
AI代码解释
复制
        myField = new ObservableInt();
        myField.addOnChangedListener(myListener);

我想把它重构到单一的地方,以避免干燥的问题。我试图在上面的每个构造函数中创建私有构造函数并调用this(),但是编译器抱怨说,"data“字段可能没有初始化,我不想通过参数将它传递给该私有构造函数,因为在我的示例中,需要填充大量的data

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-03 00:10:04

您可以尝试使用这样的初始化器:

代码语言:javascript
运行
AI代码解释
复制
public class MyClass {
    private final ObservableInt myField  = new ObservableInt();
    private final int data;
    {
       myField.addOnChangedListener(myListener);
    }

    public MyClass(int data) {
        this.data = data;
    }

    public MyClass(Bundle bundle) {
        this(bundle.getInt("SomeName"));
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-10-02 23:58:21

尝试创建私有构造函数并调用这个()

您可能并不总是可以使用DRY,但在您的情况下,我会将构造函数链在一起:

代码语言:javascript
运行
AI代码解释
复制
public class MyClass {

    private final ObservableInt myField;
    private final int data;

    public MyClass(int data) {
        myField = new ObservableInt();
        myField.addOnChangedListener(myListener);

        this.data = data;
    }

    public MyClass(Bundle bundle) {
        this(bundle.getInt("SomeName"));
    }
}
票数 -1
EN

Stack Overflow用户

发布于 2017-10-03 00:02:49

默认使用"int“构造函数:

代码语言:javascript
运行
AI代码解释
复制
public class MyClass {

  private final ObservableInt myField;
  private final int data;

  public MyClass(int data) {
    myField = new ObservableInt();
    myField.addOnChangedListener(myListener);
    this.data = data;
  }

  public MyClass(Bundle bundle) {
    this(bundle.getInt("SomeName"));
  }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46539746

复制
相关文章
@Autowired的使用:推荐对构造函数进行注释
Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
java架构师
2019/06/13
2K0
对 list 中的相同数据进行分组
同一组数据分组 需求:一个 list 里可能会有出现一个用户多条数据的情况。要把多条用户数据合并成一条。 思路:将相同的数据中可以进行确认是相同的数据,拿来做分组的 key,这样保证不会重。 实际中使用,以用户数据为例,可能用户名和身份证号是不会变的,用这两个条件拼接起来。
潇洒
2019/06/28
5.8K0
【C++】构造函数初始化列表 ③ ( 构造函数 的 初始化列表 中 为 const 成员变量初始化 )
如果 类 中定义了 被 const 修饰 的 成员变量 , 那么该成员变量 必须被初始化 , 否则会报错 ;
韩曙亮
2023/10/15
3050
【C++】构造函数初始化列表 ③ ( 构造函数 的 初始化列表 中 为 const 成员变量初始化 )
【Kotlin】类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )
在 Kotlin 类中 , 可以在 类声明 时 在 类名后 定义 " 主构造函数 " ;
韩曙亮
2023/03/30
5K0
【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 中 不能调用 构造函数 )
下面的代码中 , 在 fun 函数中 , 调用 Student(18, 180) 代码 , 创建 Student 类型的匿名对象 , 匿名对象的生命周期 只存在于 这一行代码 , 该行代码执行完毕后 , 匿名对象 就会被 析构 ;
韩曙亮
2023/10/15
2630
【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 中 不能调用 构造函数 )
【C++】构造函数意义 ( 构造函数显式调用与隐式调用 | 构造函数替代方案 - 初始化函数 | 初始化函数缺陷 | 默认构造函数 )
C++ 提供的 构造函数 和 析构函数 作为 类实例对象的 初始化 和 销毁 方案 ;
韩曙亮
2023/10/15
9050
【C++】构造函数意义 ( 构造函数显式调用与隐式调用 | 构造函数替代方案 - 初始化函数 | 初始化函数缺陷 | 默认构造函数 )
@Autowired的使用--Spring规范解释,推荐对构造函数进行注释
Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies.
ydymz
2018/09/10
4.2K0
根据分组依据对Java集合元素进行分组
业务背景:在项目中有个“分账”功能,就是支付的钱一部分要根据不同商品的分账金额自动分给平台提供商。
张张
2019/12/25
2.5K0
js 中的构造函数,构造函数作用,构造函数和普通函数的区别
函数的定义方式: 1.声明式函数定义: function 函数名 (){};这种定义方式,会将函数声明提升到该函数所在作用域的最开头,也是就无论你在这个函数的最小作用域的那儿使用这种方式声明的函数,在这个作用域内,你都可以调用这个函数为你所用。 2.函数表达式:let fun = function(){}; 此方式定义的函数,只能在该作用域中,这段赋值代码执行之后才能通过fun()调用函数,否则,由于变量声明提升,fun === undefined。 3.new Function 形式: var fun1 = new Function (arg1 , arg2 ,arg3 ,…, argN , body );Function构造函数所有的参数都是字符串类型。除了最后一个参数, 其余的参数都作为生成函数的参数即形参。这里可以没有参数。最后一个参数, 表示的是要创建函数的函数体。
全栈程序员站长
2022/10/04
3.6K0
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )
1 . 构造函数个数 : Kotlin 类定义时需要指定主构造函数 , 还可以指定 0 ~ 多个次构造函数 ;
韩曙亮
2023/03/27
4.3K0
Python中如何进行数据分组
数据分组 根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间进行研究,以揭示其内在联系和规律性。 cut 函数: cut(series,bins,right=True,labels=NULL) ① series  需要分组的数据 ② bins    分组的划分数组 ③ right   分组的时候,右边是否闭合,默认为闭合True ④ labels  分组的自定义标签,可以不自定义 import pandas data = pandas.read_csv( 'D:\\PDA\
Erin
2018/01/09
3.2K0
Java对List列表进行分组处理(对List列表固定分组/对List列表平均分组)
将一组数据平均分成n组 即:数据分组数固定为N,每组数据个数不定,每组个数由List列表数据总长度决定 /** * 将一组数据平均分成n组 * * @param source 要分组的数据源 * @param n 平均分成n组 * @param <T> * @return */ public static <T> List<List<T>> averageAssign(List<T> source, int n) { List<List<T>> result = new Ar
目的地-Destination
2023/03/06
3.5K0
如何根据函数返回的值对dart中的List进行排序
# 关于排序:如何根据函数返回的值对dart中的List进行排序 void main(){ List<POJO> pojo = [POJO(5), POJO(3),POJO(7),POJO(1)]; // fill list pojo..sort((a, b) => a.id.compareTo(b.id)); for(var i in pojo){ print(i.id); // prints list in sorted order i.e 1 3 5 7 } }
徐建国
2021/08/26
11.8K0
类——构造函数之初始化列表
        在我们已经基本了解了类的由来,和其六大基本默认函数后,此时我们再回过头来看,其中的构造函数。在前文已经说过构造函数的作用为初始化成员变量,但是真的就这么简单了吗?如果成员变量为常变量(const)那还能构造成功吗?在构造函数体内部,我们直接可以用类的成员变量来赋值,但是在调用构造函数前是没有这个类对象的,既然都没有这个类对象,哪前面我们直接用来赋值的类中的成员变量是哪里来的?
比特大冒险
2023/04/16
9090
类——构造函数之初始化列表
Python中的构造函数
Python中的构造函数是__init__函数。在Python中,子类如果定义了构造函数,而没有调用父类的,那么Python不会自动调用,也就是说父类的构造函数不会执行。
用户7886150
2020/12/20
1.7K0
【C++】构造函数初始化列表 ② ( 构造函数 为 初始化列表 传递参数 | 类嵌套情况下 的 构造函数 / 析构函数 执行顺序 )
在下面的代码中 , B 类的 有参构造函数 , 传入了 3 个参数 , 这三个参数都不在函数体中使用 , 而是在 参数列表中使用 ,
韩曙亮
2023/10/15
3170
【C++】构造函数初始化列表 ② ( 构造函数 为 初始化列表 传递参数 | 类嵌套情况下 的 构造函数 / 析构函数 执行顺序 )
C++构造函数初始化列表
构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。
芯动大师
2023/10/14
2490
C++构造函数初始化列表
【C++】构造函数初始化列表 ① ( 类对象作为成员变量时的构造函数问题 | 构造函数初始化列表语法规则 )
在一个类中 , 其成员变量是 带有参构造函数 的类型 , 这种情况下没有调用 有参构造函数的机会 , 此时就会出现 编译报错情况 ;
韩曙亮
2023/10/15
7210
【C++】构造函数初始化列表 ① ( 类对象作为成员变量时的构造函数问题 | 构造函数初始化列表语法规则 )
R中如何用ifelse进行数据分组
数据分组,根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间部分来研究,以揭示内在的联系和规律性; 在R中,我们常用ifelse函数来进行数据的分组,跟excel中的if函数是同一种用法。 ifelse(condition,TRUE,FALSE) > data <- read.table('1.csv', sep='|', header=TRUE); > > level <- ifelse( + data$cost<=20, "(0,20]", + ifelse( +
Erin
2018/01/09
3K0
R中如何用ifelse进行数据分组
【C++】构造函数初始化列表 ④ ( 构造函数 和 析构函数 调用顺序分析 )
析构函数调用顺序 与 构造函数调用顺序相反 , 直接 将 构造函数 调用顺序 倒序排列即可 ;
韩曙亮
2023/10/15
3710
【C++】构造函数初始化列表 ④ ( 构造函数 和 析构函数 调用顺序分析 )

相似问题

对列表的公共元素进行分组

24

构造函数必须对没有默认构造函数的成员进行初始化。

11

按公共元素对列表进行分组

15

如何基于公共成员关系对SQL进行分组

23

来自互斥构造函数的公共初始化

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文