Java llamada anónima clase interna tipo envolvente método tipos súper

Selenophile:

Os daré un ejemplo para establecer un contexto aquí, así que tengo dos interfaces cada heredan la misma interfaz de los padres y que definen su propia implementación del método abstracto de la interfaz de los padres.

interface A
{
    Set a();
}

interface B extends A
{
    @Override
    default Set a()
    {
        return null;
    }
}

interface C extends A
{
    @Override
    default Set a()
    {
        return null;
    }
}

En una interfaz llamada D, la aplicación crea una clase interna anónima que luego tiene que llamar a los súper tipos ( Be C) a()aplicación.

interface D extends B, C
{
    @Override
    default Set a()
    {
        return new HashSet()
        {
            {
                final int totalSize = D.this.B.super.a().size() + D.this.C.super.a().size();
            }
        };
    }
}

El problema es que las expresiones D.this.B.super.a()y D.this.C.super.a()no se compilan con éxito, por lo que lo está para arriba?

Gracias por la forma de sus esfuerzos.

rgettman:

Java que permite a las implementaciones de interfaz de acceso específicos con la sintaxis:

InterfaceName.super.method()

Sin embargo, dentro de la clase anónima para obtener la instancia adjuntando a D.this. No está permitido combinar estas sintaxis para obtener primero la instancia que encierra, entonces sus implementaciones súper interfaz.

La solución a este problema es mover la declaración de totalSizefuera de la clase anónima para que pueda acceder a las implementaciones de interfaz súper. La clase anónima todavía será capaz de hacer referencia a la variable local totalSizeporque es final. (Todavía sería capaz de acceder a él si fuera efectivamente final - no final. Pero nunca reasignado)

final int totalSize = B.super.a().size() + C.super.a().size();
return new HashSet()
{
     // Anonymous class implementation here.
     // You can refer to totalSize.
};

Es posible que haya omitido los genéricos por razones de brevedad, pero en caso de que no, tendrá que incluir los parámetros de tipo de Sety HashSet.

Supongo que te gusta

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