Tag: 构造函数

为什么Java更喜欢调用双构造函数?

public class test { test(double[] a) { System.out.println(“in double”); } test(Object a) { System.out.println(“in object”); } public static void main(String args[]) { new test(null); } } 在上面的代码中,我传递null作为构造函数参数。 由于null可以是任何东西,上面的代码编译得很好。 当我运行代码时我希望它在对象中打印但是它以doubleforms打印这背后的原因是什么? 注意链接的问题可能不重复,因为此问题与原始数据类型与对象相关

调用super必须是构造函数中的第一个语句,但它是

我不断收到一条错误,说“调用super必须是构造函数中的第一个语句”。 问题是它是我构造函数中的第一个语句。 public void CheckingAccountCustomer(int a){ super(n, p, b); accountNo = a; } 这也是我的超类。 public void customer(String n, int p, double b){ name = n; pin = p; balance = b; } 我在这做错了什么?

构建一个对象

我在这个博客中遇到了一种非常不寻常的方法来构建一个类的对象: http : //marchwicki.pl/blog/2010/11/building-a-pojo-in-an-elegant-way/ 。 这是一个很好的方法来做到这一点。 有什么好处?

长期运行的构造函数是否会创建半初始化对象?

我有一个类“A”,它读取XML文件并进行一些处理。 我在构造函数中添加了一个方法“load”,但我想知道如果XML文件大小很大并且需要时间加载会发生什么。 class A { public String fileName; A(String fileName) { this.fileName = fileName; load(); } private load() { //here i load some xml file by given file name; } public searchByTag(String sometag) { //some search } public extractData() { //extract some data } } 例如,如果我们有以下情况: A a = new A(“somefile”); a.searchByTag(“tag”); a.extractData(); 对象“a”是在加载文件后创建的,对吧?

使用reflection从抽象基类访问构造函数

我正在玩Java的Reflection。 我有一个带有构造函数的抽象类Base 。 abstract class Base { public Base( String foo ) { // do some magic } } 我还有一些扩展Base类。 它们没有太多逻辑。 我想用Base的构造函数实例化它们,而不必在这些派生类中编写一些代理构造函数。 当然,我想用Reflection实例化那些派生类。 说: Class cls = SomeDerivedClass.class; Constructor constr; constr = cls.getConstructor( new Class[] { String.class } ); // will return null Class clsBase = Base.class; constr = clsBase.getConstructor( new Class[] { String.class } […]

我们是否需要优先选择构造函数而不是静态工厂方法? 如果是的话,何时?

我一直在阅读Joshua Bloch撰写的 Effective Java ,到目前为止,它确实辜负了它的声誉。 第一个项目为构造函数的 静态工厂方法提供了令人信服的理由。 这么多,我开始质疑好老建设者的有效性:)。 本书的优点/缺点总结如下: 优点: 他们有名字! 我们有全面的实例控制(单身人士,表现等) 他们可以返回子类型/接口 编译器可以提供类型推断 缺点: 私有类不能被子类化 它们不像构造函数那样在文档中脱颖而出 第一个缺点实际上可能是A Good Thing (正如书中所提到的)。 第二个,我认为只是一个小缺点,可以通过即将发布的java版本轻松解决(javadoc的注释等) 看起来,最终工厂方法几乎具有构造函数的所有优点,许多优点,并没有真正的缺点! 所以,我的问题基本上分为三个部分: 默认情况下总是在构造函数上使用静态工厂方法是一种好习惯吗? 使用构造函数是否合理? 为什么面向对象的语言不能为工厂提供语言级支持? 注意:有两个类似的问题: 何时使用构造函数以及何时使用getInstance()方法(静态工厂方法)? 和对象的创建:构造函数或静态工厂方法 。 然而,答案要么只是提供上面的列表,要么重申我已经知道的静态工厂方法背后的基本原理。

由于某些中间构造函数,没有包含MySuperClass 类型的封闭实例

我试图使用超类型的内部类,它使用generics。 上面有那个奇怪的错误。 class MySuperClass { class InnerClass { } MySuperClass(InnerClass… c) { } } 在子类中,我试图实例化它: class MySubClass extends MySuperClass { MySubClass() { super(new InnerClass(), new InnerClass()); } } 编译器让我困惑 No enclosing instance of type MySuperClass is available due to some intermediate constructor 为什么?

Java:将“this”作为构造函数参数传递以引用创建对象的替代方法

我已经花了一段时间思考不同的解决方案,因为我已经阅读过(我还没有真正熟悉Java),使用它作为构造函数参数通常不是一个好习惯。 我想要做的是实例化JobGroupMod类的几个对象,并且对于每个JobGroupMod,我必须创建一定数量的JobMod对象,这些对象必须能够引用它们已经从中生成的JobGroupMod对象。 为了实现这一目标,我将“this”传递给JobMod构造函数,但即使工作,也感觉不适合设计。 public class JobGroupMod implements JobGroup { public JobGroupMod(Node n,Set clusterJobs){ JobMod j=new JobMod(n,this); } } 现在是JobMod类: public class JobMod implements Job { public JobMod(Node n, JobGroup jg){ setJobGroup(jg); } } 我的问题是,有没有更好的解决方法,或者我的解决方案是建议的方式?

构造函数和方法之间的区别

Bellow是我在Tutorials Points上找到的一个例子,它是一个构造函数的例子。 我得到了大部分,但我不明白为什么你需要一个构造函数和一个方法。 public Puppy(String name){ System.out.println(“Passed Name is :” + name ); } 我的问题是,是什么阻止你做这个呢? public static void Puppy(String name){ System.out.println(“Passed Name is: “+name); } 一旦打电话,这两个人不会做同样的事吗? 以下是完整的参考程序: public class Puppy { int puppyAge; public Puppy(String name) { System.out.println(“Passed Name is :” + name); } public void setAge(int age) { puppyAge = age; } public int […]

如何修复“构造函数调用可覆盖的方法”

我有以下设置,它给我一条消息,指出“构造函数调用Overridable方法”。 我知道这种情况正在发生,但我的问题是如何修复它以便代码仍然有效并且消息消失了。 public interface Foo{ void doFoo(); } public class FooImpl implements Foo{ @Override{ public void doFoo(){ //.. Do important code } } public class Bar{ private FooImpl fi; public Bar(){ fi = new FooImpl(); fi.doFoo(); // The message complains about this line } } 谢谢!