2009-04-20 21 views
4

我喜歡Groovy如何讓所有實例變量和類變量公開並代表您寫入getter和setter。這節省了大量不必要的編碼。在另一方面,我的老闆討厭它,讓我很傷心:(我正在尋找一種解決方案來過度冗長的Java而不使用Groovy

有沒有辦法實現的Groovy在Java中的簡潔性,而無需使用Groovy或某些其他框架/插件?

我有一種感覺,那就是不會對我在工作中引入這個外部框架寄予厚心的幫助。

所以我在尋找的是解決Java過度繁瑣但不使用Groovy或類似的東西

它可以在Java中完成 - 例如通過簡單地將所有內容公開嗎?

回答

3

去不變的數據結構。沒有吸氣,沒有安裝人員,沒有麻煩。

您可能想要嘗試一下Functional Java。它只是一個普通的Java庫,但帶有強大的抽象和有用的(不可變的)數據結構,可讓您用更少的代碼說更多。例如,翻譯如下:

List<String> s = new ArrayList<String>(); 
    for (String x : xs) { 
    for (String y : ys) { 
     for (String z : zs) { 
     s.add(doSomething(x, y, z)); 
     } 
    } 
    } 

...這樣的:

List<String> s = xs.bind(ys, zs, doSomething); 
8

Java語言就是這樣。如果不改用新語言(比如groovy),你就不會找到太多改變核心語言的地方。從管理層獲得支持可能並不像您認爲轉向常規一樣艱難。我和你幾年前處於類似的位置。您可以開始將groovy引入您的軟件的一些有意義的區域。

一個很好的開始就是開始使用它進行單元測試。本質上,當你在groovy中編寫一個類時,它會編譯成Java字節碼。只要你的classpath上有groovy jar,其他人甚至可能不知道它是groovy的代碼。通過使用它進行測試,您可以演示它如何簡化代碼並使事情變得更簡單。你應該可以把它賣給管理層。

從那裏,繼續介紹其他新的領域,動態語言可以爲您節省一些工作。由於Groovy和Java使用相同的一組核心庫,因此Groovy和Java很好地結合在一起。

0

我不知道有什麼東西可以讓您的源代碼更小,除了針對特定任務(JPA,Swing等)的更有效的框架。

這種類型的功能通常來自您的IDE。

我使用Netbeans,它有工具來編寫getters/setters,自動實現抽象方法和各種其他快捷方式。當然,源代碼仍然是冗長的。

6

在這種情況下,一個可以爲你寫getters和setters的IDE可以成爲你的朋友。

我發現寫getters和setters是編寫新類最重複和最不感興趣的部分。使用像Eclipse這樣的IDE,它可以爲您提供automatically generate the getters and setters,它可以減少編寫冗餘代碼的痛苦。

當然,它不會緩解使用getXsetX方法的需要,但至少它會使這些類的實現更容易一些,減輕負擔。

+0

很酷。我使用Eclipse,但不知道它具有此功能。 – 2009-04-20 02:29:44

+0

與重構工具一起,我發現Eclipse的getter/setter生成功能是一個非常有用的功能。 – coobird 2009-04-20 02:31:08

1

您可以使用AOP來幫助刪除一些冗長的內容。

例如,如果你有一個屬性: 字符串名稱;

然後,您可以定義: @GetterSetter public String Name(String name){};

然後有一個方面,尋找註釋,並在它周圍,以便任何閱讀,這是當參數爲空,或寫入(參數不爲空),然後它會採取適當的行動。

這樣寫起來相當容易,但是你必須爲AOP買入,這可能很有挑戰性。但是,正如其他人提到的那樣,Eclipse和Netbeans將很容易地創建getters/setters,所以如果你不需要對它們做任何特殊的事情,那麼它應該很容易。

我傾向於將自己的屬性放在他們自己的類中,這只是getters/setters,然後我不必看冗長,以及需要時的equals和hash方法,然後在其他類中只是使用它,並隱藏無聊的額外編碼。

0

試試我的豆註釋:http://code.google.com/p/javadude/wiki/Annotations

註釋處理器生成超對你有很多典型的您通常必須編寫的樣板文件:

@Bean(
    properties={ 
     @Property(name="name", bound=true), 
     @Property(name="age", type=int.class, bound=true) 
    } 
) 
public class Person extends PersonGen { 
} 
0

通過使用特定於領域的框架,您可以大大提高Java的有效抽象級別。例如,當您編寫RESTful Web服務時,Restlet負責處理大部分無聊的細節。或者,如果您需要將POJO映射到XML或JSON並從中映射,則像XStream或JAXB這樣的包會自動生成映射邏輯。爲了避免繁瑣的JDBC編程,可以嘗試像iBatis或Hibernate這樣的持久性管理器。像Freemarker和Velocity這樣的模板化系統可以更容易地生成標記。

即使在沒有工具支持的情況下,通常也可以找到將低級別細節分解爲常用方法和類的方法,以便您的頂級代碼更加抽象。

(你可能會考慮讓你的老闆,如果你能在你的項目支撐作用評價Groovy中,比如寫一些單元測試的。)

0

您可以標註任何屬性或方法與任何標準訪問修飾符或Groovy中的類型聲明。請記住,Groovy是Java的超集。