创建一个片段:构造函数vs newInstance()
我最近厌倦了在创建我的Fragments时不断不得不知道String将参数传递到Bundles中的密钥.因此,我决定为我的Fragments制作构造函数,以便将我想设置的参数放在我想设置的参数,并使用正确的String键将这些变量放入Bundles中,因此消除了对其他Fragments和需要知道这些密钥. public ImageRotatorFragment() { super(); Log.v(TAG, "ImageRotatorFragment()"); } public ImageRotatorFragment(int imageResourceId) { Log.v(TAG, "ImageRotatorFragment(int imageResourceId)"); // Get arguments passed in, if any Bundle args = getArguments(); if (args == n
2 2024-02-14
编程技术问答社区
在Akka Java行为体模型中,路由器可以创建具有非默认构造函数的行为体吗?
在Akka Java Actor模型中,如果我有roundrobinrouter,则在调用tell()方法时,我希望路由器(作为主人)使用非默认构造函数创建儿童演员,因为我需要传递某些参数.我该怎么做? 我知道我可以使用Props的非默认构造函数的演员,但是当主演员是路由器时如何使用它? 谢谢! 解决方案 路由器构造中的道具是路由器的路由的道具,而不是路由器本身. 您可以简单地做类似的事情: system.actorOf(new Props(new UntypedActorFactory() { public UntypedActor create() { return new MyActor("foo", "bar"); } }).withRouter(...)) ,所有路由都将使用称为 的特定构造函数的myactor. 您可以用通常可以做的道具做任何事情.有关更多信息,请参见 akka docs P>
4 2024-01-22
编程技术问答社区
如何在scala中扩展一个抽象类并使用抽象构造函数
我有抽象类A abstract class A{ def this(obj:Object){ this() obj match{ case s:String => stringMethod(s) case n:Int => intMethod(n) } def stringMethod(s:String) def intMethod(n:Int) } 我有一个扩展此类的课程 class B(obj:Object) extends A(obj){ var s:String = null def stringMethod(s:String){ this.s = s } def intMethod(n:Int){ this.s = n.toString } } 该类的重点是实例化对象及其变量,具体取决于用于实例化的对象的类型,但问题是,当调用抽象构造函数时,将摘要的对象的默认构造函数(正在扩展
0 2024-01-09
编程技术问答社区
未初始化的串口属性是否像使用默认构造函数时那样被赋予默认值?
如果使用默认的构造函数或无参数构造器创建串行端口,则端口将提供默认值. // Create a new SerialPort object with default settings. _serialPort = new SerialPort(); 该构造函数使用默认的属性值,当未指定无.例如,数据属性属性默认为8,均等属性默认为无枚举值,stopbits属性默认为1,以及com1的默认端口名称. 有几个构造师 使用具有参数的构造函数时: 在使用带有参数的构造函数和使用默认构造函数时,不在串行端口构造函数的参数之内的属性? 这个问题 ,有趣的答案,评论和随后的聊天讨论让我问这个. 解决方案 您可以查看其您将看到所有重要属性,包括PortName,BaudRate,DataBits,Parity和StopBits具有默认值,如果它们不存在于构造函数参数中,则默认值将用于他们. 还具有默认值的其他一些重要属性,虽然它们不存在于构造函数,但在某些情况下,
8 2024-01-05
编程技术问答社区
在C#中使用反射检测编译器生成的默认构造函数
我是针对.net 3.5 sp1的目标,我正在使用/// /// documentation /// public sealed class MyClass { /// /// documentation /// public void Method() { } } 在上面的示例中,据我了解,编译器为我的课程生成了默认的构造函数.问题在于,CommentChecker会发出警告,告诉我构造函数缺少评论. 我试图修改程序以检测此特殊情况并忽略它,但是我已经卡住了,我已经尝试了IsDefined(typeof(CompilerGeneratedAttribute), true),但这无效. 因此,简而言之,如何使用反射检测默认构造函数? 解决方案 无法通过元数据自动检测默认的构造函数.您可以通过创建一个具有两个类的类库来测试这一点,一个具有明确的默认构造函数,一个没有.然后在组件上运
0 2024-01-05
编程技术问答社区
在C#中使用反射检测编译器生成的默认构造函数
我是针对.net 3.5 sp1的目标,我正在使用/// /// documentation /// public sealed class MyClass { /// /// documentation /// public void Method() { } } 在上面的示例中,据我了解,编译器为我的课程生成了默认的构造函数.问题在于,CommentChecker会发出警告,告诉我构造函数缺少评论. 我试图修改程序以检测此特殊情况并忽略它,但是我已经卡住了,我已经尝试了IsDefined(typeof(CompilerGeneratedAttribute), true),但这无效. 因此,简而言之,如何使用反射检测默认构造函数? 解决方案 无法通过元数据自动检测默认的构造函数.您可以通过创建一个具有两个类的类库来测试这一点,一个具有明确的默认构造函数,一个没有.然后在组件上运
2 2024-01-05
编程技术问答社区
结构初始化和默认参数的不直观行为
public struct Test { public double Val; public Test(double val = double.NaN) { Val = val; } public bool IsValid { get { return !double.IsNaN(Val); } } } Test myTest = new Test(); bool valid = myTest.IsValid; 上面给出valid==true,因为未调用带有默认ARG的构造函数,并且使用标准默认值= 0.0创建对象. 如果结构是类,则行为为valid==false,这就是我所期望的. 我发现行为的差异,尤其是在结构案例中的行为惊人和不直觉 - 发生了什么?符号结构上的默认ARG如何服务? 如果它没有用,为什么要编译? 更新:要澄清此处的重点不是行为是什么,而是为什么在没有警告和行为不直觉的情况下进行编译.即,如果未应用默认ARG,因为在新测试
4 2024-01-05
编程技术问答社区
为什么字符串类没有一个无参数的构造函数?
int和object具有无参数构造函数.为什么不string? 解决方案 更新: 为您提供更多信息. 您没有string的空构造函数,但是您确实有String.Empty.原因是因为A string是不变的对象您修改的每个实例实际上都在内存中创建一个新的string. 例如:string name = "";尽管它是一个空string它仍然可以围绕二十个字节.其中string.Empty只能围绕四个或八个字节.因此,尽管它们的意思是同一件事,但一个比另一个更有效. 但是,我相信您希望一个空的构造函数可以进行操作,而StringBuilder可能会更常用.可以找到两者之间的一些非常好的用法在这里(确定性能命中/用法). 可以找到有关string的一些其他信息,可以找到示例: string first = "Greg "; // Creates string "first" in memory. string last = "Arrigotti "
0 2024-01-04
编程技术问答社区
为什么无参数的Guid构造函数会生成一个空的GUID?
为什么无参数GUID构造器会像GUID.NewGuid()? 是否有特定用途? 解决方案 为什么无参数GUID构造器会像GUID.NewGuid()? 简短答案:因为语言/运行时没有让GUID类型的设计器定义默认构造函数. 不仅是常规的"默认构造" struct的值为零,您根本无法为struct定义默认的构造函数.当您说新的GUID()运行时为您提供一个新对象,其中所有字段均以其默认值初始化: http://msdn.microsoft.com/en-us/library/ah19swz4%28vs.71%299.aspx 可以在此处找到一些理由: https://web.archive.org/web/20131102220804/http://www.yoda.arachsys.com/csharp/faq/faq/faq/faq/#sonstruct.construct.constructors 其他解决方案 此行为与.NET框架中其余的值类型一致.
0 2024-01-04
编程技术问答社区
我们是否应该总是在类中包含一个默认的构造函数?
我已经被同事问了这个问题,我们应该始终在班级中加入默认的构造函数吗?如果是这样,为什么?如果没有,为什么不呢? 示例 public class Foo { Foo() { } Foo(int x, int y) { ... } } 我也有兴趣从专家那里得到一些照明. 解决方案 您必须记住,如果您不提供超载构造函数,则编译器将为您生成默认构造函数.这意味着,如果您只有 public class Foo { } 编译器将生成: public class Foo { public Foo() { } } 但是,一旦添加其他构造函数 public class Foo { public Foo(int x, int y) { // ... } } 编译器将不再自动为您生成默认构造函数.如果该类已经在其他代码中使用,该代码依赖于
6 2024-01-02
编程技术问答社区
XMLSerializer调用的无参数构造函数的规则是什么
在子领先的" XML序列化注意事项"下>在此链接上说... 一类必须具有一个无参数构造函数 xmlSerializer. 这实际上是误导的.实际上,您无需声明无参数构造函数(默认构造函数). stackoverflow.com上的答案表明,除非您声明参数化的构造函数,否则您无需声明无参数构造函数.声明参数化的构造函数后,您还需要声明无参数构造函数. 我对无参数构造函数块感兴趣. 我的测试程序表明,在一种情况下,将无参数的构造函数留为空并且恢复成功是无害的.在另一种情况下,无参数构造函数中的成员数据分配似乎被修复材料所覆盖.在另一种情况下,可以在无参数构造函数中增强成员数据对象图,并且在恢复对象之前的增强构建器.也许规则是,如果成员数据是参考,则如果引用为null,则将恢复,但是如果无参数构造函数块使其无效,则该恢复将在该参考中增强对象. 编辑:我刚刚意识到该规则是错误的,因为实际字符串是一种参考类型,我的测试显示字符串参考无法在恢复中幸存下来. 无参数构造函
6 2023-12-23
编程技术问答社区
命名用户控件在XAML中没有默认构造函数
我有一个没有无参数构造函数的用户控件;我们称之为WithoutDefaultConstructor.我想插入WithoutDefaultConstructor称为myControl的myControl中的XAML代码(称为MainWindow).但是,我发现此编译器错误: 类型的" not defeaultConstructor" 不能具有名称属性.价值 没有默认的类型 构造函数可以用作项目 在资源范围内. 如何在不添加无参数构造函数的情况下修复此操作.WithoutDefaultConstructor? 这是MainWindow.xaml的内容:
22 2023-12-17
编程技术问答社区
在不需要默认构造函数的情况下插入或更新unordered_map
我有一个std::unordered_map,我想添加一个键值对.如果键尚不存在,那么我希望将其添加给给定值.如果密钥已经存在,那么我希望更新值. 这里的标准建议似乎是使用operator[].但这要求映射的值类型是默认可构造的.我希望避免提供默认的构造函数.我该怎么办? 解决方案 您应该使用insert_or_assign(C ++ 17) 如 cppreference在这种情况下,可约束的对象: insert_or_assign返回比操作员[]更多的信息,并且不需要映射类型的默认结构性.
2 2023-11-20
编程技术问答社区
默认构造函数是否总是初始化所有成员?
我可以发誓我不记得以前见过这个,我很难相信我的眼睛: 非凝集类的隐式定义默认构造函数是初始化其成员的吗? 在Visual C ++中,当我运行此无辜的代码... 时 #include struct S { int a; std::string b; }; int main() { return S().a; } ...令我惊讶的是,它返回了非零的价值!但是,如果我删除字段b,则返回零. 我在所有版本的VC ++上都尝试了一下,我可以动手,并且似乎在所有版本上都可以做到这一点. 但是,当我在clang和GCC上尝试它时,无论是以C ++ 98模式还是C ++ 11模式,这些值都将初始化为零. 正确的行为是什么?不能保证为零吗? 解决方案 引用C ++ 11: 5.2.3显式类型转换(功能符号)[expr.type.conv] 2表达式T(),其中T是 simple-type-pexifier 或 typename-
12 2023-11-20
编程技术问答社区
未初始化的常数
这与当前的MSVC编译器完美地编译了: struct Foo { } const foo; 但是,它无法使用当前的G ++编译器进行编译: error: uninitialized const 'foo' [-fpermissive] note: 'const struct Foo' has no user-provided default constructor 如果我自己提供默认的构造函数,则可以使用: struct Foo { Foo() {} } const foo; 这是MSVC过于允许的另一种情况,还是G ++太严格了? 解决方案 C ++ 03标准: 8.5 [dcl.init]第9段 如果未针对对象指定初始化器,并且该对象的(可能是CV合格的)非POD类类型(或其数组),则该对象应默认为initialial;如果对象是constemififif的类型,则基础类类型应具有用户指定的默认构造函数. 从上面的GCC
16 2023-11-20
编程技术问答社区
在C#中从类外访问一个私有构造函数
如果我使用私人默认构造函数和具有参数的公共构造函数定义类,我该如何访问私有构造函数? public class Bob { public String Surname { get; set; } private Bob() { } public Bob(string surname) { Surname = surname; } } 我可以在类似的类上通过静态方法访问私有构造函数: public static Bob GetBob() { return new Bob(); } 我认为我可以通过扩展方法访问私有构造函数,因为(根据我的理解)扩展方法被翻译,以便它们 似乎是 静态方法在课堂上,但我不能: static class Fred { public static Bob Bobby(this Bob bob) { return new Bob(); } } 那么,如
4 2023-11-20
编程技术问答社区
为什么std::vector'的元素不需要一个默认的构造函数?
以及如何编写自己的数组类以不需要 元素的默认构造函数?现在,当我进行新的[]分配空间时,我需要一个默认的构造函数. std :: vector没有. 他们如何做这个魔术? 解决方案 std::vector不需要默认构造函数,因为它从未使用过.每次构造元素需要时,它都会使用 copy构造函数,因为每次都有复制的内容:现有向量元素或您自己提供的元素,以通过方法的参数复制(明确或隐式,通过依赖a默认参数)) 您可以以完全相同的方式编写类似的类:每次您需要在数组中构造新元素时,都要求用户提供用于复制的元素.在这种情况下,构建原始元素成为用户的责任. 每次看起来像std::vector"需要"您的默认构造函数时,这只是意味着您依靠某些vector s方法的默认参数,即是 you you /em>谁试图默认构造一个元素,而不是向量.向量本身再也不会尝试默认构造元素. 为了避免在内存分配期间默认构造函数要求,标准库分配 raw raw Inibialized 内存
10 2023-11-17
编程技术问答社区
虚继承是否会迫使基类默认为可构造的?
在以下代码中,编译器请求基础 x 为默认构造.但是,如果我从类节点的继承中删除 virtual 关键字,那么对成员的访问 m_x 当然会变得模棱两可但是默认构造函数不再需要 x类. 这样做的原因是什么? #include struct Apply { template struct Node : virtual T // this line contains the virtual inheritance { template Node( Args... args ) : T( args... ) {} }; template struct Inheritance; template
对于默认的构造函数和析构函数,"=default "与"{}"有什么不同?
我最初仅将其作为有关驱动器的问题发布,但是现在我添加了对默认构造函数的考虑.这是最初的问题: 如果我想给我的班级一个虚拟的破坏者,但是 否则,与编译器的生成相同,我可以使用=default: class Widget { public: virtual ~Widget() = default; }; ,但似乎我可以使用一个效果来获得相同的效果 空定义: class Widget { public: virtual ~Widget() {} }; 这两个定义的行为有所不同吗? 基于此问题发布的答复,默认构造函数的情况似乎相似.鉴于" =default"和" {}"之间的含义几乎没有差异,但对于默认构造函数的这些选项之间的含义几乎没有差异?也就是说,假设我想创建一种类型的类型,该类型将既可以创建和破坏,又要说出为什么要说 Widget() = default; 而不是 Widget() {} ? 如果在其原始发布之后扩展此
8 2023-11-10
编程技术问答社区
联盟的成员有用户定义的构造函数
对于以下代码: class Foo{ int foo; public: Foo() : foo(13) {} int getFoo() const { return foo; } }; union Bar{ Foo fBar; double dBar; }; 我相信这在C ++中是完全合法的. http://en.cppreference.com/w/cpp/language/language/union#explanation 说: 如果两个工会成员是标准的类型,则在检查其共同子序列 方面是明确的. 和因此 Bar bar = { Foo() } 当我在Visual Studio 2008中尝试此操作时,我会发现错误: 错误c2620:union Bar的成员Bar::fBar具有用户定义的构造函数或非平凡默认构造函数 在/p> 工会成员不能具有默认构造函数. 这里发生了什么?这是C ++的要求
8 2023-11-06
编程技术问答社区