2015-04-19 58 views
1

我想了解下面的代碼,其中返回類型被視爲不兼容。Java - 瞭解私有最終自定義類型的返回類型

return new PassLine(One, Two, roll); 
incompatible types: PassLine cannot be converted to TheDie 

希望有人可以擺脫一些光線,以便我可以繼續。

我期待得到dieOne + dieTwo的總卷。

public class PassLine { 
    private int thePoint; 

    private final TheDie dieOne; 
    private final TheDie dieTwo; 
    private final TheDie rollTheDie; 

    public PassLine(TheDie dieOne, TheDie dieTwo, TheDie rollTheDie) { 
     super(); 
     this.dieOne = dieOne; 
     this.dieTwo = dieTwo; 
     this.rollTheDie = rollTheDie; 
    } 

    public TheDie dieOne() { 
     TheDie obj = new TheDie(); 
     obj.rollTheDie(); 
     return dieOne; 
    } 

    public TheDie dieTwo() { 
     TheDie obj = new TheDie(); 
     obj.rollTheDie(); 
     return dieTwo; 
    } 

    public TheDie rollTheDie() { 
     dieOne(); 
     dieTwo(); 
     return rollTheDie; 
    } 

     public PassLine passLine() { 

    TheDie One = dieOne(); 
    TheDie Two = dieTwo(); 
    TheDie roll = rollTheDie(); 

    return new PassLine(One, Two, roll); 
} 

    public static void main(String[] args) { 
     System.exit(0); 
    } 
} 

從 - 公共最終類TheDie

public int rollTheDie() { 

    Random rand = new Random(); 
    oneDie = rand.nextInt(6) + 1; 

    return oneDie; 

    } 

新的錯誤消息如下:

上: 返回新軋製線(一,二,輥);

錯誤:

 Incompatible Type: TheDiecannot be converted to String 
    Incompatible Type: TheDiecannot be converted to String 
    Introduce... 
    May split declaration into a declaration and assignment 
    Flip operands of the binary operator 

回答

2

那麼錯誤不能更清晰,

public TheDie PassLine() { 

    TheDie One = dieOne(); 
    TheDie Two = dieTwo(); 
    TheDie roll = rollTheDie(); 

    return new PassLine(One, Two, roll); 
} 

您可以指定,當你返回PassLine對象的方法應該返回一個TheDie對象。

根據你的錯誤信息

incompatible types: PassLine cannot be converted to TheDie

這兩種互不兼容,你的方法改爲

public PassLine PassLine() { 

    TheDie One = dieOne(); 
    TheDie Two = dieTwo(); 
    TheDie roll = rollTheDie(); 

    return new PassLine(One, Two, roll); 
} 

也許你真的想通過調用它真的就返回TheDie的方法返回一個TheDie新的PassLine對象。

+0

不錯,感謝您的解釋。 現在返回正確的類型它說 - 不兼容的類型:TheDie不能轉換爲字符串 - 修改錯誤類型 – SFmtl

+0

@S_HereToLearn請張貼您的新的return語句。 –

+0

@S_HereToLearn你的新方法是正確的。也許有一種方法,當你返回一個'PassLine'時,你沒有添加返回字符串的地方? –

0

你有兩種不同的類類型:TheDie和PassLine。假設TheDie不是擴展形式軋製線的一類,你將有不兼容的類型,因爲

public TheDie PassLine() { 
     ... 
     return new PassLine(One, Two, roll); 
    } 

,你應該返回TheDie的對象方法頭的狀態。

0

在您的代碼:

public TheDie PassLine() { 

TheDie One = dieOne(); 
TheDie Two = dieTwo(); 
TheDie roll = rollTheDie(); 

return new PassLine(One, Two, roll); 
} 

您正在試圖恢復通行線爲TheDie。 更改public TheDie PassLine()public PassLine PassLine()

1

的方法PassLine(奇怪的名字,相同的名稱,類...)被聲明爲返回一個TheDie對象,但返回PassLine對象,所以錯誤。

您必須將方法的返回類型更改爲PassLine或返回TheDie對象。

你真的想擁有一個同名的方法嗎?這是不是一個很糟糕的編輯構造函數?

請注意:Java的命名約定是:

  • lowerCamelCase的包名和方法名
  • UpperCamelCase的類和接口名稱

你有一個類PassLine與方法PassLine(應該是passLine

+0

感謝您對定義的幫助。這是一個明確的解釋 – SFmtl

+0

該方法已被命名爲'passLine','PassLine'是它的返回類型。 –

+0

現在,在編輯之前有一個'PassLine'方法,返回類型爲'TheDie' –