2015-04-19 3 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); 
} 

Вы указываете, что метод должен возвращать объект TheDie в то время как вы возвращаете PassLine объект.

В соответствии с Вашим сообщением об ошибке

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 не может быть преобразован в String - Это изменило тип ошибки – 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' –

Смежные вопросы