sobrecargar un método genérico overriden - java

PumpkinBreath:

Estoy revisando para un examen de java por ir a través de algunos exámenes de años anteriores y estoy totalmente perplejo sobre estas cuestiones con el uso de la sobrecarga de métodos.

La pregunta es:

Considere la siguiente interfaz Java.

public interface Converter<A, B> { 
    B convert(A xs); 
}

(A) Escribir un ConvertAll método por defecto en la interfaz de convertidor que tiene un XS ArrayList como entrada y devuelve un nuevo ArrayList. Si las x ArrayList es [x1, ..., xn], el método devuelve [Convert (x1), ..., convertir (x)]. En el método se puede suponer que x no es nulo. Si una de las llamadas para convertir tiros una excepción, su método no debe cogerlo.

(B) Escribir un StringConverter clase que implementa la interfaz anterior adecuadamente. En particular, la clase se supone que tiene un entero convertido método pública (cadena de palabras) que se comporta de la siguiente manera:

• Si la palabra es la referencia nula, una IllegalArgumentException es lanzada.

• De lo contrario, el método devuelve la longitud de la palabra.

Esto es lo que he hecho:

Converter.java

package com.sp2.bbk.q4;

import java.util.ArrayList;

public interface Converter<A, B> {

    B convert(A xs);

    default ArrayList<B> convertAll(ArrayList<A> xs) {
        ArrayList<B> newArrayList = new ArrayList<>();
        for (A a : xs) {
            newArrayList.add(convert(a));
        }
        return newArrayList;
    }
}

StringConverter.java

package com.sp2.bbk.q4;

import java.util.ArrayList;

public class StringConverter<A, B> implements Converter<A, B> {

    private ArrayList<A> stringList;

    public StringConverter() {
        this.stringList = new ArrayList<>();
    }

    public ArrayList<A> getStringList() {
        return stringList;
    }

    public Integer convert(String word) {
        if (word == null)
            throw new IllegalArgumentException();
        return word.length();
    }

    @Override
    public B convert(A xs) {
        // what happens here??
    }
}

Main.java

package com.sp2.bbk;

import com.sp2.bbk.q4.StringConverter;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {

        // Question 4
        StringConverter<String, Integer> stringConverter = new StringConverter<>();
        stringConverter.getStringList().add("This");
        stringConverter.getStringList().add("is");
        stringConverter.getStringList().add("a");
        stringConverter.getStringList().add("sentence");

        ArrayList<Integer> convertedList = stringConverter.convertAll(stringConverter.getStringList());
        System.out.println(convertedList);
    }
}

Parece bastante sencillo, el método convertidos ConvertAll () de todas las palabras en un entero que representa el tiempo que cada palabra está llamando al método convert () y almacenar el resultado en una lista.

Lo que no puedo hacer ejercicio es cómo utilizar el método de conversión aplicado () para llamar al método otra convert () en StringConverter.java y, de hecho hacer la conversión. Yo ya sea a empezar un bucle recursivo infinito o conseguir una advertencia llamada al método ambiguo. Esto no es tarea, simplemente revisión. Cualquier ayuda para mí entender esto sería muy apreciado.

Henrique Sabino :

Lo que hay que hacer es implementar la interfaz de la siguiente manera:


public class StringConverter implements Converter<String, Integer> { 
    //...
}

A continuación, el método se puede anular la siguiente manera:

@Override
public Integer convert(String word) {
    if (word == null)
        throw new IllegalArgumentException();
    return word.length();
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=236271&siteId=1
Recomendado
Clasificación