【问题标题】:What does it mean to call a class as a function? [closed]将类调用为函数是什么意思? [关闭]
【发布时间】:2013-04-20 00:27:38
【问题描述】:

我正在将一些代码从 Java(我对这种语言一无所知)移植到 C。由于 Java 是一种类似 C 的语言,我在转换大多数语句时没有问题。但我不知道代码的某些部分是什么意思。它将一个java类作为函数调用并作为参数传递:

假设类为:

public class foo { 
    public foo(Typex x) { //etc }
}

public class baa {
    public baa(Typex x) { //etc }
}

在另一个类中它被称为:new foo(baa())

这是什么意思?

【问题讨论】:

  • 移植的第一条规则:如果你不知道它的作用,你就不能把它移植过来。
  • @Makoto:这取决于语言中使用的功能。例如,这个java程序中没有滥用关键字,因为它很简单。

标签: java code-conversion


【解决方案1】:

这是错误的! 新的 foo(baa())

你不能在 Java 中做到这一点,而是你需要做的是

new foo(new baa().bar()) . 

这意味着您首先创建一个 baa 的引用(对象)并调用该引用的 bar() 方法。记住 Java 中的 new 关键字是从一个类中创建一个新的引用。它调用类的构造方法并为该引用分配内存。

在上述情况下,它将 bar() 方法返回的任何内容作为参数传递给 foo 类,进而创建 foo 类的引用。

这是一个好的开始: [1]:http://docs.oracle.com/javase/tutorial/java/javaOO/index.html

【讨论】:

    【解决方案2】:

    它被称为构造函数。见here

    public class Foo { 
       public foo(Typex x) { //etc }
    }
    
    public class Baa {
     public baa(Typex x) { //etc }
    }
    
    Foo f = new Foo(x);  // Creates a new instance of Foo.
    Baa b = new Baa(x);  // Creates a new instance of Baa.
    

    【讨论】:

    • 没有new关键字返回什么?
    • @Jack 你试过后发生了什么?
    • 这里找不到java编译器。
    • @icanc:不回答我的问题。
    • @Jack 你需要new。否则,你会得到一个编译错误。
    【解决方案3】:

    它是一个构造函数——这个小东西让创建新对象变得更容易。你可以这样做

    Object Name = new Object(Param1, Param2);
    

    而不是

    Object Name = new Object();
    Name.Param1 = foo;
    Name.Param2 = bar;
    

    【讨论】:

    • 所以new obj()obj() 相同?
    • @Jack 显然不是;你是怎么得出这个结论的?
    • 我真的不明白。我在问new foo(baa()) 是什么,baa()class
    • @Jack 该语法意味着 baa() 是当前类或其基类之一中的方法。否则就是编码错误,没有任何意义。
    猜你喜欢
    • 2013-10-08
    • 2010-12-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2015-01-10
    相关资源
    最近更新 更多