是否可以只在同一个包和子包中访问接口?
我已经使用默认修饰符定义了一个接口:
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
的类。所以我写了这段代码:
package com.mycompany.myapp.dao.jpa;
import java.io.Serializable;
public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id> {
...
}
但是我收到了这个错误:
BaseDao无法解析为类型
这是Java对接口的限制,还是我做错了?
由于
答案 0 :(得分:11)
在Java中,没有“子包”这样的东西。不要被点缀所欺骗。 com.mycompany.myapp.dao
和com.mycompany.myapp.dao.jpa
是两个独立的包,彼此无关。
所以回答你的问题:不,不可能只对子包提供界面。您可以将您的界面公开,但随后它将对所有其他包可见。
答案 1 :(得分:4)
查看 Java Acess Modifiers : https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
在表格中,您可以看到 默认 或 无修饰符 仅限于相同的访问权限同一个包中的类或其他类。据我所知,你希望它对其他包也是可见的,但不是对世界可见,为此你需要使用保护修饰符,但它是不可能的,因为它不适用所以回到你的问题没有你不能 : - (
答案 2 :(得分:1)
如果您正在寻找某种方法来隐藏和暴露您想要的其他Java应用程序,可能您需要一个组件,所以看看OSGi。在跳跃(或不跳入)之前,This question是一个良好的开端。
答案 3 :(得分:0)
看起来你 extends 你需要 implements 。
public class BaseDaoJpa<T, Id extends Serializable> implements BaseDao<T, Id>
{
...
}