2013-12-14 4 views
0

Мне нужно реализовать интерфейс, который имеет два аргумента общего типа и метод, который принимает один общий тип в качестве аргумента, а другой тип общего типа - как возвращаемый. Вот как я его реализовал, но я не знаю, правильно ли это.Правильный способ расширения ArrayList и реализации интерфейса с помощью Generics

public interface Evaluate<K, T> 
{ 
     T use(K k); 

} 

Кроме того, мне нужно расширить Java ArrayList и добавить к нему методы, такие как карта. Метод map() должен принимать один аргумент типа Evaluate и возвращать новый список. Я не знаю, следует ли мне реализовать интерфейс и как передать аргумент в моем методе. Это моя попытка до сих пор:

public class Array<K, T> extends java.util.ArrayList<T> implements Evaluate<K,T> 
{ 
    public ArrayList<T> map(Evaluate f1) 
    { 

    } 
} 
+0

Ваш интерфейс называется Evaluate, и вы реализуете и выполняете функцию. Что оценивается и что такое функция? –

+0

С первого взгляда ваш код выглядит нормально, какова фактическая проблема, с которой вы сталкиваетесь? –

+0

Я отредактировал код, поскольку у меня была ошибка – user3077915

ответ

0

Делает это либо:

public class Array<K, T> extends java.util.ArrayList<T> implements Evaluate<K,T> { 
    T use(K k) { 
     // implementation 
    } 

    public java.util.ArrayList<T> map() { 
     // use(K) somewhere here 
    } 
} 

или

public class Array<K, T> extends java.util.ArrayList<T> { 
    public java.util.ArrayList<T> map(Evaluate<K,T> evaluate) { 
     // use evaluate somewhere here 
    } 
} 

Вашей реализация does't есть определение T use(K), объявленные в интерфейсе - вы можете оставить его не реализуется только в абстрактном классе или интерфейсе, расширяющем другой. Также ваш аргумент является сырым, поскольку вы его не пишете как map(Evaluate<K,T> f1) (Java не автоматически заменяет общие параметры).

+0

Что вы подразумеваете под: «В вашей реализации нет определения использования T (K), объявленного в интерфейсе»? Метод в интерфейсе не должен быть оставлен с пустым телом? Кроме того, почему это дает мне ошибку: ArrayList не может быть разрешен для типа? – user3077915

+0

Вы написали 'tools: Evaluate ', и ваш класс 'Array' не является абстрактным. Это означает, что в классе 'Array' должна быть реализация' T use (K k) 'или файл просто не будет компилироваться. Интерфейс должен иметь только объявления, его не абстрактные реализации должны иметь их. Я добавил отсутствующий 'java.util.', но, честно говоря, когда я вижу, что кто-то борется с такими простыми ошибками компилятора, я задаюсь вопросом, должен ли он уже переходить в несколько более продвинутый материал, например, писать собственный класс дженериков. –

+0

Спасибо за помощь. – user3077915

Смежные вопросы