2015-04-19 33 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' –