2013-11-26 3 views
0

Итак, это следующий вопрос, который у меня был ранее. Я написал следующий код:Расширение встроенного абстрактного абстрактного шаблона Класс шаблона

import java.util.List; 
import java.util.Iterator; 

public abstract class IterableList<T> { 
    public void perfrom(List<T> ls) { 
    Iterator<T> l = ls.iterator(); 
     while (l.hasNext()) 
      action(l.next()); 
    } 
    protected abstract void action(T obj); 
} 

, который должен создать шаблон (Сорт, как макрос в C), так что я могу реализовать метод действий и перебирать много вещей в списке. У меня проблемы с кодом, чтобы сделать это inline (я думаю, что это слово?), Но я не могу понять, как писать его с помощью дженериков. Чтобы дать вам пример того, что я пытаюсь сделать, я в основном хочу сделать следующее:

new IterableList<String>{ 
    void action(String s) { 
     // do something 
    } 
}.perform(myListOfStrings); 

Но я действительно не получаю никакой удачи, и я не дал никаких полезных ошибок. Я вроде как из своей зоны знакомства на Java, я не программировал на этом языке довольно долгое время.

До сих пор ошибки, которые я получаю (в затмении), - это «Синтаксическая ошибка на токенах, неудачных конструкциях» и «void - недопустимый тип для действия переменной». Насколько мне известно, они не очень полезны.

+0

Что случилось с тем, что вы пробовали? –

+0

Вам нужно предоставить дополнительную информацию, в частности, что не работает и по какой-то конкретной причине вы считаете, что она не делает то, что вы хотите. Иначе никто не сможет вам помочь. На основе небольшого кода, который вы предоставили, он выглядит нормально до сих пор, поэтому проблема в коде, который вы не использовали. –

+0

Я получаю «Синтаксическая ошибка на токенах, неуместных конструкциях» и «void - это недопустимый тип для действия переменной». Я не уверен. Я использую eclipse. Это единственная информация об ошибке, которую я получаю. Я не знаю, что случилось. – user2827678

ответ

2

Ваш синтаксис немного неправильный.

List<String> myListOfStrings = ...// some List 

new IterableList<String>() { // missing() 
    public void action(String s) { 
     // do something 
    } 
}.perfrom(myListOfStrings); 

Обратите внимание, что вы не можете уменьшить видимость ваших методов. action объявлен как public в родительском классе, поэтому action() в дочернем классе должно быть не менее public. Кроме того, perform имеет орфографическую ошибку.

выше будет эквивалентно

public class AnonymousClass extends IterableList<String> { 
    public void action(String s) { 
     // do something 
    } 
} 

... 
new AnonymousClass().perfrom(myListOfStrings); 
+0

Вы можете определить абстрактный метод в общем виде, а затем реализовать его без дженериков? –

+0

@SteveP Проверьте это последнее изменение. Надеюсь, что это объяснит. –

+0

отлично, спасибо! – user2827678

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