2015-11-04 92 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對象。通常情況下,你用對象多做一點點(不僅返回一個新實例)

我不知道我是否回答你是問題。如果不。請告訴我。

相關問題