Хорошо, работаю над этим слишком долго и не могу заставить его работать.У меня есть список типов потоков, которые могут быть разных классов, т.е. WriteFileData (расширяет поток).Я хочу за цикл по этому списку и сделать вызов, чтобы добавить в очередь массив байтов.В настоящее время у меня есть это в классе брокера
// 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[]>();
...
}