2015-06-19 6 views
5

È possibile che un'interfaccia sia accessibile solo nello stesso pacchetto e pacchetti figlio?È possibile che un'interfaccia sia accessibile solo nello stesso pacchetto e pacchetti figlio?

ho definito un'interfaccia con modificatore di default:

package com.mycompany.myapp.dao; 

import java.io.Serializable; 

interface BaseDao<T, Id extends Serializable> { 
    public void create(T t);  
    public T readById(Id id); 
    public void update(T t);  
    public void delete(T t); 
} 

Ora ho un pacchetto figlio dove voglio definire una classe che implementa BaseDao. Così ho scritto questo codice:

package com.mycompany.myapp.dao.jpa; 

import java.io.Serializable; 

public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id> { 
... 
} 

Ma ottengo questo errore:

BaseDao cannot be resolved to a type

Quindi questa è una limitazione da Java per un'interfaccia o sto facendo strada sbagliata?

Grazie

+2

btw non ci sono pacchetti figlio !!! – Hiru

+1

[Non esistono pacchetti _child_ o _sub_ pacchetti] (http://stackoverflow.com/questions/7847568/relation-between-package-and-a-sub-package-in-java) – Raedwald

risposta

10

In Java non c'è cosa come un "pacchetto figlio". Non farti ingannare dai punti. com.mycompany.myapp.dao e com.mycompany.myapp.dao.jpa sono due pacchetti separati che non hanno alcuna relazione l'uno con l'altro.

Quindi per rispondere alla tua domanda: no, non è possibile rendere un'interfaccia visibile solo ai pacchetti figlio. Puoi rendere pubblica la tua interfaccia, ma poi sarà visibile a tutti gli altri pacchetti.

+1

E non dimenticare di importare com.mycompany.myapp.dao.BaseDao: 'all'interno di com.mycompany.myapp.dao.jpa.BaseDaoJpa'. Devi importarlo perché - come spiegato da @Hoopje - i pacchetti non sono correlati. – Turing85

+0

Quindi non esiste un concetto di gerarchia dei pacchetti in Java? Sebbene se li si guardi fisicamente in Esplora risorse, ad esempio, è possibile visualizzare la gerarchia. – srh

+0

Credo che la domanda sia * Perché non riesco ad accedere alla mia interfaccia in un pacchetto diverso * anziché * È possibile limitare un'interfaccia ai pacchetti figlio * – CKing

4

Dai un'occhiata a Java Acess modificatori: https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Nella tabella si può vedere che predefinita o No modificatore è limitata a acess solo dalla stessa classe o di altro classi nello stesso pacchetto. Come ho capito, vuoi che sia visibile anche ad altri pacchetti, ma non al mondo, e per questo devi usare il modificatore protetto, ma è impossibile dal momento che non è aplicabile perciò tornando alla tua domanda no non puoi : - (

+1

grazie. Il modificatore 'protected' per l'interfaccia è esattamente ciò di cui ho bisogno ma java non lo supporta; non so perché? – srh

+0

Non ha motivo di esistere xD. MODIFICA: dai un'occhiata qui: http://stackoverflow.com/questions/3869556/why-a-class-cannot-be-defined-as-protected –

0

sembra che avete estende in cui è necessario implementa

public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id>  
{ 
... 
} 
+0

Grazie. Buona pesca. Ho risolto l'OP. – srh

1

Se siete alla ricerca di un modo per nascondere ed espone solo ciò che si vuole il resto della vostra applicazione Java. , forse vuoi un componente quindi dai un'occhiata a OSGi. This question è un buon inizio da leggere prima saltando (o non) dentro.

Problemi correlati