2015-11-04 82 views
-3

我来自JavaScript和Node.js背景,尽管我拥有大部分的OOP基础知识,但还是有许多我不太了解的Java基础知识。例如,我正在做a Spring tutorial,并立即遇到了一些令我困惑的语法。为什么在Java中的类实例中返回一个类实例?

第一次演练是一个hello world应用程序。首先,我们建立了一个问候类:

public class Greeting { 

    private final long id; 
    private final String content; 

    public Greeting(long id, String content) { 
     this.id = id; 
     this.content = content; 
    } 

    public long getId() { 
     return id; 
    } 

    public String getContent() { 
     return content; 
    } 
} 

首先,我不明白为什么他们定义的类本身内部的类的实例开始。为什么不为公共课添加参数?无论如何,那不是我的问题。当我得到更多的损失是,当我们做一个问候控制器:

package hello; 

import java.util.concurrent.atomic.AtomicLong; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
public class GreetingController { 

    private static final String template = "Hello, %s!"; 
    private final AtomicLong counter = new AtomicLong(); 

    // This ensures that HTTP requests to /greeting are mapped to the greeting() method. 
    @RequestMapping("/greeting") 
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { 
     return new Greeting(counter.incrementAndGet(), 
      String.format(template, name)); 
    } 
} 

在这个文件时,我就拿到public Greeting greeting创建问候语类的新实例,但它只有一个参数时,构造函数有两个,long idString content。接下来,他们返回该类的另一个实例,这次使用与构造函数结构相匹配的参数。

这是为什么?

+3

_define类中的类的一个实例本身_你在哪里看到这个?另外,如果这不是您的问题或与此相关,请将其删除。 –

+2

_'''Public Greeting greeting'创建Greeting类的新实例_否,它不。这只是一个返回类型为“Greeting”的方法。 –

+2

“但它只有一个参数,当构造函数有两个” - 不是另一个参数“String.format(...)”? (看起来像逗号被用来代替该行上的点) – BretC

回答

0

首先,我建议你学习Java编程语言,没有使用Spring:

随着

public class Greeting { 

您正在定义名为Greeting的类。这是你的班级。

这个类里面你有:

public Greeting(long id, String content) { 

这是类的构造函数。在Java中,没有对象没有调用它们的构造函数。所以为了创建一个新的对象,你必须调用它的构造函数。

然后,你必须

public class GreetingController { 

这个定义的另一个类,在这种情况下GreetingController。

此类具有的方法(功能):

public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) 

这个方法接收一个称为name字符串并返回问候的一个对象(实例)。为了回报问候,你必须首先创建实例的实例,这是由调用它的构造:

return new Greeting(counter.incrementAndGet(), 
      String.format(template, name)); 

此行是调用构造函数和传递两个参数,您在问候限定的相同类'构造函数。

-1

公共问候问候(@RequestParam(值= “姓名”,默认值= “世界”)字符串名称)只定义了一个方法与返回类型问候问候

new Greeting(counter.incrementAndGet(), 
     String.format(template, name)) 

上面代码实际上创建了一个新的Greeting实例并将其返回。

0

我不知道我是否理解你的问题,但我试着给你一个答案。

通常情况下,您使用控制器(在你情况下是GreetengsController)向世界公开资源。该资源是一个Greeting对象/实例。你用两个参数初始化对象(在你的情况下是一个long和一个String)。

public Greeting greeting(... String name) 

是这样的方法(功能)声明,说:此fuctionn期望字符串“名称”作为参数,并返回一个对象问候给客户端(呼叫者),并用

return new Greeting(....) 

您返回Greeting对象。通常情况下,你用对象多做一点点(不仅返回一个新实例)

我不知道我是否回答你是问题。如果不。请告诉我。

相关问题