Java 接口是否可能仅在同一包和子包中可访问?
接口是否可能仅在同一包和子包中可访问 我已经定义了一个带有默认修饰符的接口:Java 接口是否可能仅在同一包和子包中可访问?,java,interface,Java,Interface,接口是否可能仅在同一包和子包中可访问 我已经定义了一个带有默认修饰符的接口: 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)
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);
}
但我得到了这个错误:
BaseDao无法解析为类型
这是Java对接口的限制还是我做得不对
谢谢在Java中没有“子包”这样的东西。不要被这些点愚弄了
com.mycompany.myapp.dao
和com.mycompany.myapp.dao.jpa
是两个独立的包,彼此没有关系
所以要回答您的问题:不,不可能使接口仅对子包可见。您可以公开您的接口,但其他所有软件包都可以看到它。查看Java访问修饰符: 在该表中,您可以看到默认值或无修饰符仅限于同一类或同一包中的其他类访问。据我所知,您希望它对其他软件包可见,但对世界不可见,为此您需要使用受保护的修改器,但这是不可能的,因为它不适用,所以回到您的问题不,您不能 :-(看起来您在需要工具的地方进行了扩展
公共类BaseDaoJpa实现BaseDao
{
...
}
如果您正在寻找某种方法来隐藏并仅向Java应用程序的其余部分公开您想要的内容,那么您可能需要一个组件,所以请先看看OSGi。在跳转(或不跳转)之前阅读是不是一个好的开始进入它。顺便说一句,没有子包!!!而且不要忘记导入com.mycompany.myapp.dao.BaseDao;在com.mycompany.myapp.dao.jpa.BaseDaoJpa
中。你需要导入它,因为正如@Hoopje解释的那样,包是不相关的。所以在Java中没有包层次结构的概念?尽管你从物理上看它们例如,在Windows资源管理器中,您可以看到层次结构。我相信问题是,为什么我不能在不同的包中访问我的接口,而不是您可以将接口限制为子接口packages@ChetanKinger这不是OP写的。但OP想知道错误背后的原因。这才是真正的问题tion.Thank.很好的捕获。我已经修复了OP.Thank。受保护的
接口修饰符正是我需要的,但java不支持它;不知道为什么?它没有存在的理由xD。编辑:看看这里:
package com.mycompany.myapp.dao.jpa;
import java.io.Serializable;
public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id> {
...
}
public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id>
{
...
}