好的,这个问题太久了,无法让它发挥作用。我有一个Thread类型列表,可以是不同的类,即WriteFileData(扩展Thread)。我想循环遍历该列表并执行调用以添加队列字节数组。我目前在Broker类中有这个
// consumers is filled with different Thread types all having a queue
// variable of type LinkedBlockingQueue
ArrayList<Thread> consumers = new ArrayList<Thread>();
synchronized void insert(final byte[] send) throws InterruptedException {
for (final Thread c : consumers) {
if (c instanceof WriteFileData) {
((WriteFileData)c).queue.add(send);
}
...other class threads...
}
但我想做的事情更像是
synchronized void insert(final byte[] send) throws InterruptedException {
for (final Thread c : consumers) {
Class<?> cls = Class.forName(c.getClass().getName());
Field field = cls.getDeclaredField("queue");
Class<?> cf = Class.forName(field.getType().getName());
Class[] params = new Class[]{Object.class};
Method meth = cf.getMethod("offer", params);
meth.invoke(cf, send); // errors at this line....
编辑:修复了“找不到方法错误”但现在似乎无法调用方法,因为我发送的是一个数组,而且它的方法只需要一个对象。
....唉它在meth.invoke出错了。不知道怎么做这个,因为这是很多层次,我想在队列上使用add方法,但这是一个类抽象层。
以下是WriteFileData的内容......
public class WriteFileData extends Thread {
LinkedBlockingQueue<byte[]> queue = new LinkedBlockingQueue<byte[]>();
...
}
答案 0 :(得分:1)
以下是我对@Erik的一些建议所做的。
这是WriteFileData,添加了方法add(byte [] send)...
public class WriteFileData extends Thread {
private LinkedBlockingQueue<byte[]> queue = new LinkedBlockingQueue<byte[]>();
public void add(byte[] send) {
queue.add(send);
}
...
}
现在我的Broker类方法如下所示:
public synchronized void insert(final byte[] send) {
for (final Thread c : consumers) {
try {
Class<?> cls = Class.forName(c.getClass().getName());
Method meth = cls.getMethod("add", new Class[]{byte[].class});
meth.invoke(c, send);