Java - 了解私有最终自定义类型的返回类型

时间:2015-04-19 22:41:25

标签: 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;

    }

新的错误消息如下:

于:          返回新的PassLine(一,二,滚动);

错误:

     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

4 个答案:

答案 0 :(得分:2)

错误不能更清楚,

public TheDie PassLine() {

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

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

您指定在返回TheDie对象时该方法应返回PassLine对象。

根据您的错误消息

  

不兼容的类型:PassLine无法转换为TheDie

两种类型都不兼容,请将方法更改为

public PassLine PassLine() {

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

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

也许您真的想通过调用一个真正在新TheDie对象上返回TheDie的方法来返回PassLine

答案 1 :(得分:1)

方法PassLine(奇怪的名称,与类的名称相同...)被声明为返回TheDie对象,但返回PassLine对象,因此错误。< / p>

您必须将方法的返回类型更改为PassLine或返回TheDie对象。

你真的想拥有一个同名的方法吗?它不是一个编辑不好的构造函数吗?

请注意:Java命名约定是:

  • 包名称和方法名称的lowerCamelCase
  • 类和接口名称的UpperCamelCase

您的课程PassLine的方法为PassLine(应为passLine

答案 2 :(得分:0)

您有两种不同的类类型:TheDie和PassLine。假设TheDie不是一个从PassLine扩展的类,你将会有不兼容的类型,因为

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

方法标题指出您应该返回TheDie的对象。

答案 3 :(得分:0)

在您的代码中:

public TheDie PassLine() {

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

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

您正在尝试将PassLine作为TheDie返回。 将public TheDie PassLine()更改为public PassLine PassLine()