【问题标题】:Java: How can a constructor return a value? [duplicate]Java:构造函数如何返回值? [复制]
【发布时间】:2010-04-04 11:45:45
【问题描述】:
$ cat Const.java 
public class Const {
    String Const(String hello) {
        return hello; 
 }
 public static void main(String[] args) {
     System.out.println(new Const("Hello!"));
 }
}
$ javac Const.java 
Const.java:7: cannot find symbol
symbol  : constructor Const(java.lang.String)
location: class Const
  System.out.println(new Const("Hello!"));
                     ^
1 error

【问题讨论】:

  • 考虑将这个问题的标题编辑为“Java:我的构造函数在这里返回值吗?”我有一个关于 Java 如何从构造函数返回值的具体问题,我认为这个问题是关于更一般的主题......相反,它类似于“帮助,我不能为我的构造函数分配返回值!”

标签: java constructor return-value


【解决方案1】:

您定义的实际上不是构造函数,而是称为Const 的方法。如果您将代码更改为这样的内容,它将起作用:

Const c = new Const();
System.out.println( c.Const( "Hello!" ) );

如果没有明确定义特定的构造函数,编译器会自动创建一个无参数的构造函数。

【讨论】:

    【解决方案2】:

    构造函数不能返回值;他们返回构造的对象,可以这么说。

    你得到一个错误,因为编译器正在寻找一个将字符串作为参数的构造函数。由于您没有声明了构造函数,因此唯一可用的构造函数是不带任何参数的默认构造函数。

    为什么我说你没有声明构造函数?因为一旦为方法声明了返回值/类型,它就不再是构造函数,而是常规方法。

    来自Java Documentation

    一个类包含的构造函数是 调用以从 班级蓝图。构造函数 声明看起来像方法 声明——除了它们使用 班级的名字,没有回报 输入。

    如果您详细说明您要实现的目标,那么某人可能会告诉您如何实现该目标。

    【讨论】:

      【解决方案3】:

      实际上java类中的构造函数不能返回一个值,它必须是下面的形式

      public class Test {
       public Test(/*here the params*/) {
         //this is a constructor
         //just make some operations when you want to create an object of this class
       }
      }
      

      检查这些链接 http://leepoint.net/notes-java/oop/constructors/constructor.html http://java.sun.com/docs/books/tutorial/java/javaOO/constructors.html

      【讨论】:

        【解决方案4】:

        构造函数不能返回值,因为构造函数隐式返回对象的引用ID,并且构造函数也是方法,方法不能返回多个值。所以我们明确地说构造函数没有返回值。

        【讨论】:

          【解决方案5】:

          已经有很多很棒的答案了。我想补充一点,如果您想通过调用构造函数获得一些与对象本身分开的返回代码,您可以将构造函数包装在 factory method 中,例如在创建时可以执行一些数据在构造的对象中进行验证并根据结果返回boolean

          【讨论】:

            【解决方案6】:

            构造函数不能返回值。那是最终的。同样的道理——它不能有返回类型,这就是你得到编译错误的原因。你可能会说,返回值总是隐含地是构造函数创建的对象。

            【讨论】:

              【解决方案7】:

              构造函数不能像“普通”函数那样有返回值。在创建相关类的 istance 时调用它。 它用于执行该实例的初始化。

              【讨论】:

                【解决方案8】:

                我认为产生您想要的效果的最佳方法如下:

                public class Const {
                
                    private String str;
                
                    public Const(String hello) {
                        str = hello; 
                    }
                
                    public String toString() {
                        return str;
                    }
                
                    public static void main(String[] args) {
                        System.out.println(new Const("Hello!"));
                    }
                }
                

                这替换了您之前使用的public String Const() 方法,并通过覆盖Objectpublic String toString() 方法(所有Java 类都继承自该方法),当您想要打印对象时,对象的String 值会正确打印,所以你的主要方法保持不变。

                【讨论】:

                  【解决方案9】:
                  public class Const {
                    private String myVar;
                  
                    public Const(String s) {
                      myVar = s; 
                    }
                  
                    public String getMyString()
                    {
                        return myVar;
                    }
                  
                    public static void main(String[] args) {
                      Const myConst = new Const("MyStringHere"); 
                      System.out.println(myConst.getMyString());
                    }
                  }
                  

                  【讨论】:

                  • 你应该创建一个 toString() 函数而不是 getMyString()。所以你可以做System.out.println(myConst)
                  【解决方案10】:

                  要从构造函数传回一个值 - 只需传入一个数组作为参数。 说明原理:

                  Test() {
                      Boolean[] flag = new Boolean[1];
                      flag[0] = false;
                      new MyClass(flag);
                      System.out.println(flag[0]); // Will output 'true'
                  }
                  
                  class MyClass {
                      MyClass(Boolean[] flag) {
                          // Do some work here, then set flag[0] to show the status
                          flag[0] = true;
                      }
                  }
                  

                  【讨论】:

                    【解决方案11】:
                    /************************************************
                       Put the return value as a private data member, which gets
                       set in the constructor. You will need a public getter to
                       retrieve the return value post construction
                    ******************************************************/
                    
                    class MyClass
                    {
                       private Boolean boolReturnVal;
                    
                       public Boolean GetReturnVal() { return(boolReturnVal); }
                       MyClass() // constructor with possibly args
                        {
                           //sets the return value boolReturnVal
                        }
                    
                     public static void main(String args[])
                     {
                         MyClass myClass = new MyClass();
                    
                        if (myClass.GetReturnVal())
                        {
                           //success
                        }
                    
                     }
                    

                    }

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-10-06
                      • 2021-12-31
                      • 1970-01-01
                      • 2012-08-07
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多