Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我应该使用多个构造函数还是一个接口?

我应该使用多个构造函数还是一个接口?
EN

Stack Overflow用户
提问于 2015-09-28 00:48:00
回答 3查看 746关注 0票数 1

我有一个名为Package的类,在这个类中,我有大约10个属性,让我们称之为1,2,3,4。这些属性的类型是stringsints和一些DateTimes。在创建包的新对象时,有时只需要属性1,有时需要5、6和9,有时需要3和10等等。

所以只有两个例子:new Package("bla", "bla bla",100)new Package(2983)

我有朗读

接口看起来像类,但没有实现。它所包含的唯一内容是事件、索引器、方法和/或属性的声明。接口只提供声明的原因是它们是由类和结构继承的,它们必须为声明的每个接口成员提供一个实现。

由于类中没有其他方法,只有构造函数和属性,所以最好使用20个构造函数,还是应该为这种情况创建一个接口?

编辑:--我可能应该提到,我也有一些enums来“某种”确定它是哪种Package

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-28 00:53:12

在这里,界面对你没有任何帮助。

如果要强制将特定的变量填充在一起,比如1、2和3应该总是一起填充,但在另一种情况下,仅4就足够了,您可以使用单独的构造函数,或者具有创建对象的有用名称的静态方法(如CreateFromIdCreateFromNameAndAge)。

如果您根本不在乎,您可以简单地创建一个无参数的构造函数(或者一个带有可选字段的构造函数),并使用对象初始化器设置所需的字段:

代码语言:javascript
运行
AI代码解释
复制
var x = new Class() { Field1 = 1, Field2 = "2" };

也许这是你在单个对象上做得太多的一个迹象,但是如果没有关于类设计的实际信息,我们就不能说那么多。

如果包有不同的用途(如ProductPackagePersonPackage等),继承似乎也是一个不错的解决方案。共享属性驻留在基类中,所有特定属性都可以驻留在派生类中。

票数 3
EN

Stack Overflow用户

发布于 2015-09-28 00:52:46

构造函数提供了如何创建对象的指导方针。假设使用接口意味着指定需要存在的属性,则没有提供任何关于属性需要如何初始化的指导。

拥有多个构造函数应该更好,因为您提供了用户可以实例化对象的方法。这将允许您相应地初始化其他参数。

如果需要规定需要存在哪些字段,则仍然可以使用接口。

票数 0
EN

Stack Overflow用户

发布于 2015-09-28 00:58:32

此外,考虑使用Builder 模式

下面是一个例子:

代码语言:javascript
运行
AI代码解释
复制
class Package
{
    public string Name { get; set; }
    public string Description { get; set; }
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }

    public static PackageBuilder Create()
    {
        return  new PackageBuilder(new Package());
    }
}

class PackageBuilder
{
    private readonly Package _package;

    public PackageBuilder(Package package)
    {
        _package = package;
    }

    public PackageBuilder WithName(string name)
    {
        _package.Name = name;
        return this;
    }

    public PackageBuilder WithDescription(string description)
    {
        _package.Description = description;
        return this;
    }

    public PackageBuilder Prop1(string prop)
    {
        _package.Prop1 = prop;
        return this;
    }

    public PackageBuilder Prop2(string prop)
    {
        _package.Prop2 = prop;
        return this;
    }

    public static implicit operator Package(PackageBuilder pb)
    {
        return pb._package;
    }
}

class Client
{
    Package BuildPackage()
    {
        var package =
            Package.Create().WithName("My Package").WithDescription("Description").Prop1("foo").Prop2("bar");
        return package;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32818969

复制
相关文章
我可以在一个构造函数中调用另一个构造函数么
但在 C++11 版本之前是不可以的,不过你可以通过两种方式来模拟实现(可以参见 the C++ FAQ entry),
ClearSeve
2022/02/10
3.1K0
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
执行接口对象的 onClick 和 onLongClick 方法 , 执行的都是相同的闭包方法 ;
韩曙亮
2023/03/30
4.5K0
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
我到底应该信gdb,还是cout?
是cout赢了,因为程序确实崩了。。。 其实我希望是gdb赢的。。。
看、未来
2021/10/25
2410
我到底应该信gdb,还是cout?
函数式接口,方法和构造函数引用
如何让现有的函数更友好地支持 Lambda,最好的方法是:增加函数式接口。所谓 “函数式接口”,是指仅仅只包含一个抽象方法,但是可以有多个非抽象方法(也就是之前提到的默认方法)的接口。 像这样的接口,可以被隐式转换为 lambda 表达式。
happyJared
2019/07/30
1.1K0
java构造函数调用另一个构造函数_java中的构造函数
* 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法
用户7886150
2021/04/29
4.6K0
多个构造器参数使用构建器
标题一眼看过去可能不是很明白要讲什么,先来看看下面一段代码。 1 package example; 2 3 /** 4 * 重叠构造器 5 * @author yulinfeng 6 * Feb 13, 2017 7 */ 8 public class Student1 { 9 private String name; 10 private int age; 11 private String sex; 12 13 public Stud
用户1148394
2018/01/09
9270
#TW好文集锦# 代码之丑--多个构造函数
代码之丑(十四)--多个构造函数 文/郑晔 代码评审,我对一个TreeSet产生了兴趣。 TreeSet<String> configuration = new TreeSet<string>(); ... Handler handler = new Handler(configuration); </string> “为什么要用TreeSet呢?”,我问道。 “因为这是构造函数的参数决定的。”,有人回答。 “可以打开源码看一下吗?”,对于这种处理,通常人们都会选择HashSet,好奇心驱使我要进一步专研
ThoughtWorks
2018/04/20
7480
师父给了我一个 .proto 文件,我应该怎么使用?
回想我年轻的时候,在做一个项目时,需要计算斐波那契数列第 n 项的值。但是我只会使用递归来实现。众所周知,递归算法计算斐波那契数列的效率极差,速度极慢。
青南
2020/11/04
2.8K3
师父给了我一个 .proto 文件,我应该怎么使用?
C++构造函数 | 构造函数
C++在建立一个对象时,常常需要作某些初始化,如果一个数据成员未被赋值,则它的值是不可预知的,因为在系统为它分配内存时,保留了这些存储单元的原状,这就成为了这些数据成员的初始值,在C++中,对象是一个实体,它反映了客观事物的属性,是应该有确定的值的。
小林C语言
2021/01/26
2.2K0
C++构造函数 | 构造函数
RPC接口实现_一个接口多个实现
其中 struct StudentInfoQueryRequest 和 struct StudentInfoQueryResponse 是请求方法。
全栈程序员站长
2022/11/04
5820
IOC容器-构造函数注入、属性注入、接口注入
今天我们详细了解一下spring框架中IOC的作用。IOC的英文名叫Inverse of Control,中文名叫控制反转也可以叫依赖注入,是spring容器的内核。AOP、事务等功能都依赖于此技术。IoC说白了,就是将对象与对象之间的依赖关系从代码中转移到spring的配置文件中,从而由spring进行对象声明周期的管理。这样的好处就是降低了对象与对象之间的依赖。IoC的工作原理就是利用Java的反射功能实例化对象与对象的依赖。除此之外,IoC容器还提供了对象的实例缓存、生命周期管理、对象实例代理、事件发布、资源装载等高级功能。
吉林乌拉
2019/08/14
4.5K0
java scanner构造函数_使用Scanner作为构造函数的参数的Java
这是一个学校任务的问题,这就是为什么我这样做的原因。使用Scanner作为构造函数的参数的Java
用户7886150
2021/04/26
2.9K0
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )
1 . 构造函数个数 : Kotlin 类定义时需要指定主构造函数 , 还可以指定 0 ~ 多个次构造函数 ;
韩曙亮
2023/03/27
4.3K0
一个函数返回多个值
第一种方法:函数返回的是一个指针地址(数组地址),这个内存地址有多个变量寄存在里面。这个方法我不太会用,传地址传值我常常搞的淅沥糊涂。
Java架构师必看
2021/03/22
1.4K0
【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )
如果 C++ 类中 没有定义构造函数 , C++ 编译器会自动为该类提供一个 " 默认的无参构造函数 " , 函数体为空 , 不做任何操作 ;
韩曙亮
2023/10/15
1.4K0
【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )
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
构造函数的使用方法分析
尽管对于大部分的数据传输对象(DTO)对象,以及我们的domain模型,属性值都是能够起到相应的作用,但是,在某些情况下如我们想使用一些固定的类。比如:表格中包括一些仅供浏览的数据或者很少改变的数据。Mybatis的构造函数注入功能允许我们在类初始化时就设置某些值,而不暴露其中的public方法。 例如,程序中我们存在这样一个实体类,如下:
用户8983410
2021/10/07
9820
【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )
无参构造函数 : 只负责为指针类型的成员变量分配内存 , 并赋值一个初始值 , 没有具体的赋值信息 , 该初始化只能为 成员变量 赋值一个默认值 ;
韩曙亮
2023/10/15
5090
【C++】构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用 )
JAVA一个接口多个实现逐个调用
经测试确认,当一个接口有多个实现时,调用时只会执行一个 有时候需要多个实现调用,方法示例如下: public interface TransCallbackInterface { public void callback(String taskId, int code, String fixed); } @Component public class TransCallbackDy implements InitializingBean,TransCallbackInterfa
JQ实验室
2022/02/10
1.5K0
python接口测试之:一个日期类型接口参数的构造思路
app上有一个功能是查询当前一周内产生的数据,对应的请求有2个必传参数:startDate 和 endDate
冰霜
2022/03/15
8140
python接口测试之:一个日期类型接口参数的构造思路

相似问题

我应该使用对象字面量还是构造函数?

126

我应该为数据类实现构造函数还是使用默认构造函数?

70

我应该使用继承还是接口?

30

我应该使用构造函数注入还是IoC.Resolve?

11

我应该总是使用‘`sink`’构造函数还是setter参数?

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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