tipos incompatibles: java.lang.Object no se puede convertir a java.lang.String?

Actualmente soy nuevo en Java y no tengo experiencia previa en programación, actualmente estoy tratando de codificar una solución a un problema propuesto durante mi entrevista universitaria :)

//Winner rabbit variable to hold the winner of the 'race'
    String winner;
    winner = yettoracequeue.element();

Antecedentes sobre el problema:

  1. asignar el primer elemento en la cola a una variable de cadena
  2. eliminar el primer elemento de la cola
  3. asignar el segundo elemento en la cola a otra variable de cadena
  4. compare ambas variables y asigne la respuesta a una nueva variable

No entiendo por qué yettoracequeue.element () se considera un objeto cuando el resultado es una cadena, por ejemplo, Rabbit, y por lo tanto no puedo asignarlo a la variable String que es ganadora.

TIA :)

Editar:

Este es el código completo

package queuepart;
import java.util.*;
public class QueuePart {

  static String nextline = System.getProperty("line.separator");

  public static void main(String[] args) {
    //Step 1: Create LinkedList() to assign to yettoracequeue
    Queue yettoracequeue = new LinkedList();

    //Step 2: add rabbits to queue
    int rabbitno = 1;
    yettoracequeue.add("Rabbit" + rabbitno);
    rabbitno++; 
    yettoracequeue.add("Rabbit" + rabbitno);
    rabbitno++; 
    yettoracequeue.add("Rabbit" + rabbitno);
    rabbitno++; 
    yettoracequeue.add("Rabbit" + rabbitno);
    rabbitno++; 
    yettoracequeue.add("Rabbit" + rabbitno);
    rabbitno++; 
    yettoracequeue.add("Rabbit" + rabbitno);

    System.out.println(nextline + "Items in the queue" + yettoracequeue + nextline);

    //Find first item in queue
    System.out.println(nextline + "First item in queue is " + yettoracequeue.element());

    //Assign First item in queue to racer
    String winner = yettoracequeue.element();

  }
}
Respuesta 1

Necesitas una conversión tipográfica:

    winner = (String) yettoracequeue.element();

Explicación: la forma en que ha declarado la yettoracequeuevariable, lo que tiene es una Queuede objetos; es decir, una cola que podría contener cualquier tipo de objeto. Ha agregado Stringobjetos a la cola, pero podría haber puesto cualquier tipo de objeto en ella.

Entonces, cuando llamas yettoracequeue.element(), el compilador solo sabe que el objeto va a ser una instancia de java.lang.Objectalguna subclase. (Esto se debe a que cada objeto es una instancia dejava.lang.Object o alguna subclase!)

Pero cuando asigna el valor a winner, el sistema necesita saber que el objeto que asigna es realmente un String. (Si fuera algo más, entonces Stringlas operaciones específicas en él no funcionarían).

Entonces, ¿qué hace el molde de tipo?

Bueno, (String) yettoracequeue.element()hace una verificación de tipo de tiempo de ejecución. Comprueba que el objeto devuelto por la llamada al método es realmente una cadena:

  • Si la verificación del tipo de tiempo de ejecución tiene éxito, trata el tipo de expresión como String... y la asignación es válida.

  • Si la verificación del tipo de tiempo de ejecución falla, entonces el sistema de tiempo de ejecución arroja un ClassCastException... y su programa generalmente fallará.


En realidad, hay una mejor manera de resolver el problema en este caso particular. El Queuetipo es en realidad un tipo genérico; es decir, puede darle un parámetro de tipo. Se parece a esto:

    Queue<String> yettoracequeue = new LinkedList<>();

Ahora he declarado que yettoracequeuees una cola que contiene Stringobjetos. Si hago eso entonces:

  • Cuando intento agregar (por ejemplo) un Integerobjeto a la cola, obtendré un error de compilación.

  • Cuando llame yettoracequeue.element()al compilador sabré que la cola solo contiene Stringobjetos, y no insistirá en el tipo de conversión cuando asigno el resultado a una Stringvariable.

Respuesta: 2

Creé un proyecto sin marcar (Crear plantilla de formulario de proyecto) y agregué una nueva clase llamada demo. pero cuando después de compilar, no pude ejecutar el código intellij no me mostró el resultado. "Editar configuración" ...

Tengo un cuadro de diálogo de alerta que se inicia cuando alguien toca un botón específico. El cuadro de diálogo de alerta contiene una vista definida por un archivo xml de diseño. Este diseño contiene varios controles como check ...

Estoy tratando de establecer un icono en un JLabel desde una carpeta de imágenes cada vez que se selecciona un elemento de un JComboBox. El nombre de los elementos en el JComboBox y el nombre de las imágenes en la carpeta son los mismos. Entonces ...

Soy un poco aficionado y estoy haciendo mi curso en línea de Android. Encontré estos 2 fragmentos de código diferentes para agregar a un URI estático público Uri buildWeatherUri (identificación larga) {return ContentUris.withAppendedId (...