Kotlin Error: la función de 'público' expone su '/ * Paquete pública * /' argumento de tipo de retorno

en primer lugar:

Soy nuevo en Kotlin y probar a escribir algún proyecto mediante el lenguaje. Estoy utilizando la biblioteca de Java y que se extiende una clase de la biblioteca en mi proyecto y estoy viendo este mensaje de error.

'public' function exposes its 'public/*package*/' return type argument FooSettings

Entiendo el problema es, pero no estoy seguro de cómo solucionarlo en Kotlin ya que todavía estoy tratando de familiarizarse con Kotlin. Puedo ver que Kotlin es ser inteligente y sólo tratar de volver del tipo que se extiende FooSettings. Sin embargo, el problema es FooSettingses pública paquete sólo lo que significa que no puede tener acceso si en mi proyecto Kotlin.

Hice algunas investigaciones sobre los genéricos Kotlin y el uso de ino out, pero yo no era capaz de solucionar el problema.

¿Hay alguna en torno al trabajo que puedo hacer en mi proyecto Kotlin para corregir el error que estoy viendo?

Fragmento de código

Esto es muestra de Java biblioteca de clases: Nota, no tengo manera de cambiar la implementación de la biblioteca. Debo utilizar esta biblioteca y extenderla en Kotlin.

Parece extraño para mí que la biblioteca de Java está escrito de tal manera y esperamos que sea reemplazado, pero que es pregunta para otro día.

import java.util.Collections;
import java.util.List;

public abstract class ClassA {
    public List<FooBuilder<?>> getBuilder(Foo foo) {
        return Collections.emptyList();
    }
}

public class Foo {
}

public abstract class FooBuilder<U extends FooBuilder.FooSettings> {
    // implementation of Class
    abstract static class FooSettings {
        // implementation of Class
    }
}

Normalmente las clases Java para prevalecer sobre el método como tal:

import java.util.List;

public class MyJavaClassA extends ClassA {
    @Override public List<FooBuilder<?>> getBuilder(final Foo foo) {
        // implementation
    }
}

Pero estoy tratando de escribir en Kotlin de tal manera que se ve como : recordatorio de que este Kotlin está en función de la biblioteca de Java y no tiene acceso a empaquetar las clases públicas.

class MyKotlinClassA : ClassA() {
    override fun getBuilder(foo: Foo): MutableList<FooBuilder<*>> {
        // implementation
    }
}

Esto hace que el error

'public' function exposes its 'public/*package*/' return type argument FooSettings
Yoni Gibbs:

Supongo que por "público paquete" que quería decir "Programa privado"? En su ejemplo, FooBuilder.FooSettingsno tiene modificador de visibilidad por lo que utiliza el valor por defecto de Java del paquete privado. Suponiendo que eso es lo que quería decir ...

Podrá acceder a la clase privada paquete, FooSettingsen su código Kotlin, pero sólo si se pone ese código Kotlin en un paquete que coincide con el uno donde FooSettingsse declara.

Seguirás recibiendo el mismo error de compilación, pero eso no es porque no se puede acceder al tipo: es porque usted está tratando de usarlo en un contexto que es más visible que la declaración del tipo. es decir, que está tratando de tener un tipo privado paquete y usarla como parte de la firma de un método público, que no está permitido. Para sortear este problema que necesita para marcar su clase como Kotlin internal.

Es posible que también sea la pena mencionar que internallos medios Kotlin es visible en ese módulo , no en ese paquete . Todo esto es explicado con más detalle aquí .

Supongo que te gusta

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