![](/img/trans.png)
[英]How get all classes implementing an interface in a specific OSGi Bundle
[英]Get all classes implementing given interface
我有Datagram
接口和一些實現它的類,例如A
和B
在運行時的某個時刻,我通過實現給定接口(即A
或B
)的Bluetooth對象接收。 我通過添加特殊的類標識號作為發送消息的第一個字節來區分它們。
關鍵是我需要實現給定接口的所有類的數組 ,因此可以將它們分配給字節數。 類的唯一標識符中的那個數字,我用它從字節數組中獲取對象,並通過藍牙從另一台設備發送。
現在,通過創建像private static final Class[] datagramClasses = { A.class, B.class };
這樣的數組來“手動”完成此操作private static final Class[] datagramClasses = { A.class, B.class };
,但是這是一種非常失禁的方式-如果將C
類添加到程序中,則也需要將其附加到datagramClasses
數組中。 另外,我可以在每個Datagram
發送完整的類名,但這很愚蠢。
經過研究后,我提出了一些想法:
.class
文件中獲取信息(類名)並使用Class.forName("com.mypackage.A");
。 但是Android使用單個.dex
文件而不是.class
文件。 任何幫助將非常感激,
格雷格
編輯:我希望能夠執行如下代碼:
final List<Class> list = new ArrayList<>();
for (final Class c : allAplicationClasses)
if (isAssignableFrom(Datagram.class))
list.add(c);
我目前不確定我是否能完全理解您的問題,但是如果您只想要一個包含實現Datagram接口的類的數組,我將建議如下所示:
public class MainActivity extends Activity {
private List<iDatagram> list = new ArrayList<iDatagram>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list.add(new A());
list.add(new B());
list.add(new C());
int i = 0;
for (iDatagram item : list) {
Log.i("class name", item.getName());
if (item instanceof A) {
Log.i("item at location "+i, item.getName());
}
else if (item instanceof B) {
Log.i("item at location "+i, item.getName());
}
else if (item instanceof C) {
Log.i("item at location "+i, item.getName());
}
i++;
}
}
interface iDatagram {
String getName();
}
class A implements iDatagram {
private String name = "I am class A";
@Override
public String getName() {
return name;
}
}
class B implements iDatagram {
private String name = "I am class B";
@Override
public String getName() {
return name;
}
}
class C implements iDatagram {
private String name = "I am class C";
@Override
public String getName() {
return name;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.