2011-12-15 3 views
-2

в классе у меня естьОпределить методы Anonimous класса, созданного внутри метода от метода вызывающей

A a = new A(){ 
    stuffhere 
}; 

теперь я обнаружил, что мне нужно, чтобы создать новый А внутри метода и вернуть его, но у меня есть для определения stuffhere из вызывающего класса. Есть ли способ в java для этого? Что-то вроде

A a = createAClass(){ 
     stuffhere 
}; 

public A createAClass()[T]{ 
     return new A(){T}; 
} 

или что-то подобное. Я бы предпочел не использовать интерфейс для перехода к методу create, поскольку мои анонимные классы не только переопределяют методы, но также добавляют атрибуты и новые функции, и я не думаю, что могу передать их с помощью интерфейса.

Любые мысли?

EDIT для -1ers (простой комментарий будет достаточно) с синтаксисом [T], очевидно, неправильно, я имел в виду то, что может передать общий код, скажем, копировать-вставить код.

createAClass()[int a; String b; @override public void mymethod(){dosomethigb;} public void dosomethingelse(){dosomethingelse;}]; 

будет работать как

public A createAClass(){ 
return new A() 
{ 
    int a; 
    String b; 
    @override public void mymethod() 
    {dosomethigb;} 

    public void dosomethingelse() 
    {dosomethingelse;}}; 
};} 

но если я пишу в другой части программы

createAClass()[float c; List d; public void yourmethod(){dosomething2;} @override public void dosomethingelse(){dosomethingelse2;}]; 

было бы вместо того, чтобы работать, как

public A createAClass(){ 
return new A() 
{ 
    float c; 
    List d; 
    public void yourmethod() 
    {dosomething2;} 
    @override public void dosomethingelse() 
    {dosomethingelse2;} 
};} 

Мое плохое, я выберите плохую возможность сделать экзамен ле, но я подумал, что это самый ясный способ. Может быть, я должен был использовать X вместо T? ..

Короче говоря: Я хочу создать анонимный класс внутри метода, но определить, что делает анонимный класс в вызове метода, а не внутри метода (например, название говорит)

EDIT2: я знаю, что я не могу получить доступ к новым методам из класса, что я делаю сейчас создать анонимный класс, добавьте несколько атрибутов и метод, а затем использовать их в переопределенный метод. Добавленные методы не являются проблемой, так как я могу заставить вызывающего метода передать интерфейс, вызываемый переопределенным методом в создаваемом анонимном классе, проблемами являются атрибуты. Я не знаю, как добавить их в анонимный класс, передавая их из вызывающего метода.

+0

Что такое [T]? Это общий тип? – viktor

+0

То, что вы предоставили, не имеет большого смысла, потому что '[T]' не является допустимым синтаксисом, и мы не можем сказать, что вы подразумеваете под этим. –

ответ

1

-то вроде следующего, как правило, работает:

public A createAClass(final String value){ 
     return new A(){ 
     // some code here that can access value 
     }; 
} 

Если вы ищете что-то еще, пожалуйста, прояснить этот вопрос. не

Редактировать

ответа нет, вы не можете сделать это. Вы пытаетесь создать A без определенного API для A. Даже если вы можете делать то, что вы предлагаете, как любой пользователь A знает, какие методы/поля доступны, если A не определен где-то? Для использования A вам понадобится API, который реализует A.

+0

Это не то, что я хочу, это просто создание анонимного класса внутри метода. Я отредактировал вопрос, возможно, теперь стало более ясно –

+0

, пожалуйста, см. Обновленный ответ –

+0

@Jhon B счастлив, что вы поняли вопрос. Я редактировал вопрос. См. EDIT2 –

1

Не уверен, полностью ли я понял.Но картина выглядит так:

public class Here { 
    private int stuff; 
    public class A { 
     private A() { ... } 
     ... ++stuff; ... 
    } 
    public A createA() { ... } 
} 
... 

Here here = ... 
A a = here.createA(); 

ПОСЛЕ ВОПРОС Редакцией:

Простейший способ переопределить метод:

final Object stuff = ...; 
A a = new A() { 
    @Override 
    protected void onSomeEvent() { 
     ... stuff.toString(); 
    } 
} 

Тогда A можно назвать onSomeEvent,

+0

. Это создает класс, который создает класс A, и увеличивает количество элементов счетчика каждый раз, когда создается новый класс? Это не то, что мне нужно. Я отредактировал вопрос, может быть, теперь это более понятно –

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