Вопрос для перечисления в Java

#java

#java

Вопрос:

Я объявил, enum Card который имеет getValue метод, который возвращает int представление с для каждого Card (трефы, сердца и т.д.). Я заметил, что я не могу использовать оператор в следующем операторе, потому что компилятор думает, что я выполняю операцию добавления с двумя несовместимыми типами.

Почему компилятор здесь не перегружается автоматически? Единственный способ, которым я могу отобразить это, — это если я вставлю "" промежуточный so currentCard "" currentCard.getValue() , принимается. Есть ли способ обойти это?

 for(Card currentCard: Card.values())  
    System.out.println(currentCard  currentCard.getValue());
  

Ответ №1:

Проблема, с которой вы сталкиваетесь, заключается просто в том, что оператор plus выполняет конкатенацию строк только тогда, когда строка является одним из элементов, которые добавляются вместе. Нет ничего, что заставляло бы его принимать строку только потому, что она находится внутри println.

Вот почему, как только вы добавляете туда пустую строку, она затем воспринимает это как конкатенацию строк и объединяет строковое представление каждого элемента вместе. В противном случае вы добавляете объект типа Card в int.

Итак, решите его, просто сделайте это:

 System.out.println(currentCard.toString()   currentCard.getValue());
  

Ответ №2:

вы должны убедить компилятор Java, что работаете со строками, нет никакого способа, которым компилятор может вычислить это автоматически при просмотре enum и int. лично я бы использовал:

 ""   currentCard   currentCard.getValue()
  

Комментарии:

1. Я думаю, что использовать toString () понятнее, чем вставлять туда «» .

Ответ №3:

Вы можете переопределить toString() , как предложено в Card примере, показанном здесь. Тогда все, что вам нужно, это:

  System.out.println(currentCard);