【问题标题】:Constructor a parameter in a method call在方法调用中构造参数
【发布时间】:2015-08-02 09:52:03
【问题描述】:

这种将构造函数传递给Java中调用的方法的类型是什么 (Class_name 是一个内部类)?

method_name(new Class_name(arguments));

我们如何在没有对象实例的情况下传递构造函数?

【问题讨论】:

  • 您没有传递构造函数。您正在传递Class_name 的新实例。
  • 是的,Class_name 是一个构造函数,但请注意new keyword。 “new 运算符通过为新对象分配内存并返回对该内存的引用来实例化一个类。new 运算符还调用对象构造函数。”因此,您将Class_name 的实例传递给method_name

标签: java methods constructor


【解决方案1】:

好吧,实际上new Class_name(arguments) 创建一个新的类实例。构造可能有用 - 它比

更简洁
Class_name instance = new Class_name(arguments);
method_name(instance);

但您以后将无法访问instance

【讨论】:

    【解决方案2】:

    如前所述,您正在传递一个新对象。

    如果您只想传递有关此类的信息,那么您的方法需要采用 Class 一个参数,例如...

    public void method_name(Class clz) { ... do something... )
    

    你可以这样称呼它......

    method_name( Class_name.class);
    

    按字面意思做你想做的另一件事是给构造函数,你可以得到它,例如,通过...

    Constructor const = Class_name.class.getConstructor( ArgumentType.class, AnotherArgumentType.class, ...);
    

    例如...

    Constructor const = Class_name.class.getConstructor( String.class);
    

    ...如果您的构造函数采用了一个 String 参数。

    然后调用你的方法...

    public void method_name(Constructor constructor) { ... do something... )
    

    ...与...

    method_name( const );
    

    最后一种方式非常具体,我怀疑它是否真的是你需要的,不管你认为你可能需要什么。

    【讨论】:

      【解决方案3】:

      new 创建一个对象并将其传递给函数。您没有通过课程,您正在通过该课程的“新”课程,这将创建一个对象

      【讨论】:

        【解决方案4】:

        你没有传递一个构造函数,一个实例:

        当你这样做时:

        MyClass myClass = new Myclass();
        method_name(myClass);
        

        你有一个MyClass 的实例到myClass。然后你用myClass 作为参数调用method_name

        所以可以简写为:

        method_name(new Myclass());
        

        【讨论】:

          【解决方案5】:

          这些类型的用例对于 装饰器设计模式 非常常见,您不需要中间对象。

          例子:

          FileReader fr = new FileReader(filename);
          LineNumberReader lnr = new LineNumberReader(fr);
          

          LineNumberReader lnr = new LineNumberReader(new FileReader(filename));
          

          查看 nio 框架中的 I/O 类,以进一步了解这些类型的用例。

          【讨论】:

            猜你喜欢
            • 2011-04-11
            • 2011-06-19
            • 2010-09-12
            • 1970-01-01
            • 1970-01-01
            • 2014-02-17
            • 2014-05-27
            相关资源
            最近更新 更多