Java 获取实现给定接口的所有类

Java 获取实现给定接口的所有类,java,android,maven,reflection,maven-plugin,Java,Android,Maven,Reflection,Maven Plugin,我有接口数据报和几个实现它的类,例如A和B。 在运行时的某个时刻,我通过实现给定接口A或B的Bluetooth对象接收。我通过添加特殊的类标识号作为发送消息的第一个字节来区分它们 关键是我需要一个实现给定接口的所有类的数组,这样我就可以将它们分配给字节数。这个数字是类的唯一标识符,我使用它从字节数组中获取对象,通过蓝牙从另一个设备发送 现在可以通过创建类似私有静态最终类[]datagramClasses={A.Class,B.Class};,的数组手动完成;,但这是一种非常不连贯的方式——如果我

我有接口数据报和几个实现它的类,例如A和B。 在运行时的某个时刻,我通过实现给定接口A或B的Bluetooth对象接收。我通过添加特殊的类标识号作为发送消息的第一个字节来区分它们

关键是我需要一个实现给定接口的所有类的数组,这样我就可以将它们分配给字节数。这个数字是类的唯一标识符,我使用它从字节数组中获取对象,通过蓝牙从另一个设备发送

现在可以通过创建类似私有静态最终类[]datagramClasses={A.Class,B.Class};,的数组手动完成;,但这是一种非常不连贯的方式——如果我将类C添加到我的程序中,我也需要将它附加到DatagramClass数组中。或者,我可以在每个数据报中发送完整的类名,但这样做很愚蠢

在做了一些研究之后,我提出了一些想法:

从.class文件中获取信息类名并使用class.forNamecom.mypackage.A;。但是Android使用单个.dex文件而不是.class文件。 使用外部库可以做到这一点——我已经尝试过了,其他的也很少,但我无法在Android平台上编译它们。有没有更简单的库可以做到这一点? 创建Maven插件就可以了。我成功地将Maven添加到我的Android项目中,但由于Android的限制,我无法再次编译一些额外的插件开发相关库。我可以用Java创建另一个相关的项目,并在那里开发插件,但我担心这太复杂了。 任何帮助都将不胜感激

格雷格

编辑:我希望能够执行如下代码:

final List<Class> list = new ArrayList<>();
for (final Class c : allAplicationClasses)
    if (isAssignableFrom(Datagram.class))
        list.add(c);

我目前不确定是否完全理解了您的问题,但如果您只是想要一个包含实现数据报接口的类的数组,我建议如下:

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;
    }
}

}

如何在数据报中创建一个静态工厂方法,根据内容创建a、B等的实例?为什么需要该数组?@pskink我已经编辑了我的问题,希望现在更清楚。不,这不是我期望的。我想在不定义新的A或A.class的情况下获取所有类。@Gogowitchzak为什么?为什么您需要rhat阵列?