我有兩個包的OSGi包:方法訪問和非出口包
com.organization.api
這個包是出口。com.organization.internal
此包未導出。
在com.organization.api
我有一個接口Foo
和類AsbtractFoo
package com.organization.api;
public abstract class AbstractFoo implements Foo {
private int state;
@Override
public int getState(){
return this.state;
}
}
在com.organization.internal
我有一個類FooManager
需要改變的Foo的狀態。如何使用com.organization.internal
以外的任何其他類不能更改foo狀態的條件來執行此操作。
package com.organization.internal;
public class FooManager {
private ???? foo = ....
public void updateFooState(){
foo.????();
}
}
我試圖添加AbstractStatefullFoo
用的默認訪問(void setState(int state)
)設定器打包com.organization.internal
和使AbstractFoo
延伸AbstractStatefullFoo
但問題是,這種情況下其它束需要包com.organization.internal
導出。
這樣的問題在OSGi中如何解決?
謝謝你的回答,但我真的需要抽象類,因爲它們包含非常多的實現,它在其他包中的具體類中繼承。 –
你也可以在兩者之間用抽象類來做到這一點。關鍵是使用OSGi服務,並讓其他bundle只使用api包中的類。 –