oop: ¿Cómo se puede "incrustar" una interfaz en una clase Java como en Go?

CorePress2024-01-24  8

En Go haces lo siguiente:

package main

type Interface interface {
    doSomething() error
    doAnotherThing() error
}
type MyImplementation struct {
    Interface
}

func (i *MyImplementation) doSomething() error {
    return nil
}

Puedes implementar algunos métodos de la interfaz y dejar el resto a la interfaz integrada.

Supongamos que quiero hacer lo mismo en Java e implementar parcialmente una interfaz de 20 o más métodos, pero no quiero escribir cada método y llamar a mi interfaz subyacente.

No tengo control sobre la interfaz ya que está en una biblioteca que estoy usando. ¿Es esto posible en Java o tengo que escribir toda la interfaz?

1

Pruebe la clase abstracta en Java

- Zeeshan

27 de marzo de 2021 a las 7:07

No tengo control sobre la interfaz ya que está en una biblioteca, ¿aún funciona el método de clase abstracta? Si es así, ¿cómo?

-Cookie04

27 de marzo de 2021 a las 7:19



------------------------------------

Cree una clase abstracta, implementando la interfaz, para poner solo algunas implementaciones de métodos comunes, y luego cree clases normales, extendiendo la clase abstracta, para el método específico restante.s implementaciones.

Algo como esto:

//don't touch the interface if its already there
interface Interface {
    public void  doSomething();
    public void doAnotherThing();
}

//use abstract class for common implementations
abstract class PartialClass implements Interface{
    @Override
    public void  doSomething() {
        System.out.println("doing someting in common code");
    }
    //no need to implement all the methods 
}

//create classes for specific implementations
class MyImplementation1 extends PartialClass {
    @Override
    public void doAnotherThing() {
        System.out.println("doing another thing in specific code");
    }
}

public class Test {
    
    public static void main(String[] args) throws Exception {
        Interface object = new MyImplementation1();
        object.doSomething();
        object.doAnotherThing();
    }

}

Salida:

doing someting in common code
doing another thing in specific code
Respondido

27 de marzo de 2021 a las 7:13

el hutt

el hutt

18k

2

2 insignias de oro

15

15 insignias de plata

45

45 insignias de bronce

8

Como mencioné, quiero implementar parcialmente una interfaz que tenga 20 o másre métodos, por lo que no quiero escribirlos todos ya que solo quiero anular algunos. Acabas de implementar ambos, lo que no me ayuda. Si pudiera mostrar cómo implementar solo uno, aún se puede usar como interfaz que respondería a mi pregunta.

-Cookie04

27 de marzo de 2021 a las 7:16

Se actualizó la respuesta.

- el hutt

27 de marzo de 2021 a las 7:19

Esta respuesta sería muy útil, pero desafortunadamente no puedo editar la interfaz (está en una biblioteca que estoy usando), por lo que no puedo definir métodos predeterminados.

-Cookie04

27 de marzo de 2021 a las 7:23

Ok, ya lo entiendo. Se actualizó la respuesta. Crea una clase abstracta para poner métodos comunes. Y clases normales para métodos restantes específicos.

- el hutt

27 de marzo de 2021 a las 7:31

1

Eso es una lástima. Si ese es el caso, la respuesta a mi pregunta sería: No, eso no es posible en Java ya que eventualmente es necesario implementar todos los métodos. Creo que responderé mi propia pregunta ahora. Gracias por el esfuerzo.

-Cookie04

27 de marzo de 2021 a las 7:50



------------------------------------

No, no puedes hacer eso en Java.

Puedes implementar solo algunos métodos en clases abstractas, pero no puedes usarlos como implementaciones reales (no puedes crearlos con nuevos).

Para usar una clase no abstracta como intEn la interfaz necesitas escribir cada método y llamar a tu instancia subyacente en cada llamada.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare