使构造函数抛出exception是一个好习惯吗? 例如我有一个classPerson ,我有age作为其唯一的属性。 现在我提供这个课程 class Person{ int age; Person(int age) throws Exception{ if (age<0) throw new Exception("invalid age"); this.age = age; } public void setAge(int age) throws Exception{ if (age<0) throw new Exception("invalid age"); this.age = age; } }
所以,当我们为创build新对象创build构造函数时,新的关键字会做3件事情,我会解释它,但如果我错了,请纠正我,我想确保我是正确的 首先我将创build一个构造函数 function ObjectCreate(){ this.a = "a"; this.b = "b"; ObjectCreate.prototype.show = function(){ alert(this.a+" "+this.b); } } obj1 = new ObjectCreate(); 现在new关键字所做的第一件事就是创build一个新对象,并将它的秘密链接设置为构造函数的原型,并将其传递给构造函数,现在可以引用它,请注意, this没有提到obj1,因为构造函数完成创build对象才会将新创build的对象返回给obj1variables。 我问这个问题,因为有些人说this是指在这种情况下的obj1对象。 所以我就在这里。
我想用一个构造函数来创build一个对象数组的深层拷贝。 public class PositionList { private Position[] data = new Position[0]; public PositionList(PositionList other, boolean deepCopy) { if (deepCopy){ size=other.getSize(); data=new Position[other.data.length]; for (int i=0;i<data.length;i++){ data[i]=other.data[i]; } 不过,由于某种原因,我上面有什么不起作用。 我有我运行的自动化testing,并没有通过这些testing。 所以这里有一个错误,我不知道它是什么。
假设我有一个实现了Runnable接口的抽象Base类。 public abstract class Base implements Runnable { protected int param; public Base(final int param) { System.out.println("Base constructor"); this.param = param; // I'm using this param here new Thread(this).start(); System.out.println("Derivative thread created with param " + param); } @Override abstract public void run(); } 这是几个派生类之一。 public class Derivative extends Base { public Derivative(final int param) […]
当你有如下的代码: static T GenericConstruct<T>() where T : new() { return new T(); } C#编译器坚持发出对Activator.CreateInstance的调用,这比本机构造函数慢得多。 我有以下解决方法: public static class ParameterlessConstructor<T> where T : new() { public static T Create() { return _func(); } private static Func<T> CreateFunc() { return Expression.Lambda<Func<T>>( Expression.New( typeof( T ) ) ).Compile(); } private static Func<T> _func = CreateFunc(); } // Example: […]
我花了很多Java编程。 在那里你调用你从super();inheritance的类super(); (你们大概都知道) 现在我有一个C ++类,它有一个默认的构造函数,它需要一些参数。 例: class BaseClass { public: BaseClass(char *name); …. 如果我inheritance这个类,它给了我警告,没有适当的默认构造函数可用。 那么在C ++中是否有像super()这样的东西,还是我必须定义一个函数来初始化所有variables?
有时候,有必要禁止C ++类中的拷贝构造函数,以使类变为“不可拷贝”。 当然, operator=应该同时被禁止。 到目前为止,我已经看到两种方式来做到这一点。 方法1是将方法声明为私有,并且不执行: class Class { //useful stuff, then private: Class( const Class& ); //not implemented anywhere void operator=( const Class& ); //not implemented anywhere }; 方法2是将私有方法声明为“空”实现: class Class { //useful stuff, then private: Class( const Class& ) {} void operator=( const Class& ) {} }; 海事组织的第一个更好 – 即使有一些意想不到的原因导致从同一个类成员函数调用复制构造函数将稍后会出现链接器错误。 在第二种情况下,这个场景直到运行时才会被忽略。 第一种方法有没有严重的缺陷? 什么是更好的方法,如果有的话,为什么?
如果操作可能需要一段时间才能在构造函数中执行,或者应该构build对象,然后再进行初始化。 例如,当构造表示目录结构的对象时,应该在构造函数中完成对象及其子项的填充。 显然,目录可以包含目录,而目录又可以包含目录等等。 这个优雅的解决scheme是什么?
我正在创build一个抽象类。 我希望我的每个派生类都被迫实现特定的构造函数签名。 因此,我做了我想要强迫他们实施的方法,我做了一个抽象的方法。 public abstract class A { abstract A(int a, int b); } 不过,我收到一条消息,指出抽象修饰符在这个项目上是无效的。 我的目标是强制这样的代码。 public class B : A { public B(int a, int b) : base(a, b) { //Some other awesome code. } } 这是所有的C#.NET代码。 谁能帮我吗? 更新1 我想添加一些东西。 结果是这个。 private A() { } protected A(int a, int b) { //Code } 这就是一些人所说的,默认是私有的,而类需要实现一个构造函数。 […]
在浏览一些旧代码时,我碰到了这个gem: MyObject o = new MyObject("parameter"); if (o == null) o = new MyObject("fallback parameter"); 第二行在Eclipse中被标记为死代码,我明白为什么。 似乎没有exception显式抛出,并且MyObject构造函数不可能抛出任何types的exception(如NullPointerException )。 我的问题是为什么有一个空检查? 以前是否可以在旧版本的Java中为构造函数返回null? 或者这是无用的和死代码?