2012-06-15 3 views
1

Я бы хотел, чтобы абстрактный класс, который имеет несколько внутренних классов, расширяет его и может создавать экземпляры его внутренних классов с помощью статических методов, но я получаю ошибку компилятора «Нет доступного экземпляра типа ITask. Должен квалифицировать выделение с помощью экземпляра окружения типа ITask (например, xnew A(), где x является экземпляром ITask). "Нет доступного экземпляра типа ITask.

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

Мой код:

public abstract class ITask { 
public abstract void Execute(Subscriber itm); 

static public ITask CreateSendTask(Buffer buffer) 
{ 
    return new SendData(buffer); 
} 

static public ITask CreateSTTask(Ticket sid) 
{ 
    return new StartTransmission(sid); 
} 

static public ITask CreateETTask(Ticket sid) 
{ 
    return new EndTransmission(sid); 
} 


private class SendData extends ITask 
{ 
     /// some implemetation... 
} 

private class StartTransmission extends ITask 
{ 
     /// some implemetation... 
} 

private class EndTransmission extends ITask 
{ 
    /// some implemetation... 
} 

}

Проблема с методами создания задачи (*.).

Спасибо!

+0

См. Http://stackoverflow.com/questions/7901941/no-enclosing-instance-of-type-server-is-accessible – Raedwald

+0

Возможный дубликат [Java - нет экземпляра экземпляра типа Foo доступен] (http: //stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible) – fabian

ответ

3

Внутренние классы должны быть статическими, если они созданы из статических методов и, следовательно, не нуждаются в доступе к охватывающей ITask.

Вы также должны соблюдать соглашения об именах Java: методы начинаются с буквы нижнего регистра.

+0

Что означает статический класс в java? Как он будет находиться в памяти? Возможно ли иметь членов в таком классе? –

+1

Статические внутренние классы - это как обычные классы верхнего уровня, за исключением их имени EnclosingClass.InnerClass. Прочтите http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html –

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