Вызов метода Java для объекта типа - PullRequest
1 голос
/ 29 марта 2011

Я хочу иметь метод, который принимает Object в качестве параметра и добавляет его в массив. Позже я хочу вызвать метод для этого объекта, но пока я не хочу определять объект как определенный тип, просто введите Object. Я знаю, что объект содержит метод, который я хочу вызвать, потому что я удостоверяюсь, что передаю объект только этим методом. Примерно так:

public void addElement(Object obj){
    elementlist.add(obj);
}
.
. 
.
elementlist.get(i).SomeMethodIknowItHas();

Однако это не работает. Есть ли способ заставить его вызвать этот метод?

Ответы [ 3 ]

1 голос
/ 29 марта 2011

Если вы действительно не хотите приводить объект как определенный тип, вам придется использовать отражение.

http://java.sun.com/developer/technicalArticles/ALT/Reflection/

Однако это обычно считается плохой практикой,и вы должны увидеть, есть ли способ использовать дженерики с интерфейсами или базовыми классами.Тот факт, что вы «знаете, что у него есть» такой-то метод, говорит мне, что он должен реализовать интерфейс, который сообщает компилятору, что у него есть этот метод.

1 голос
/ 29 марта 2011

Вы наверняка знаете, что вы добавили объект определенного типа в ArrayList, и он имеет определенный индекс. Однако Java не делает. Вам нужно либо указать, что все в ArrayList имеет определенный тип (или расширить конкретную калибровку, либо реализовать определенный интерфейс), либо вам нужно привести объект к типу, который вам известен (а также, чтобы гарантировать, что ничего не сломается, разберись со случаем, когда это не то, что ты ожидаешь).

1 голос
/ 29 марта 2011

В ролях:

((YourObject)element.get(i)).someMethodYouKnowItHas()

Еще одна альтернатива - использовать лежащую в основе коллекцию в качестве универсального типа:

class YourClass {
    List<YourObject> elementList = new ArrayList<YourObject>();

...
    public void addElement( Object obj ) {
       elementList.add( ( YourObject ) obj );
    }

    public void someWhereElse() {
       elementList.get(i).operationOne();
       elementList.get(i).operationTwo();
       elementList.get(i).operationThree();
    }
...
}

Не уверен, имеет ли это смысл в вашем случае, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...