2015-03-06 4 views
3

У меня есть кнопка, и я хотел бы сделать что-то вроде этого:добавив новую переменную без расширения класса

Button b=new Button(){public int a;}; 
b.a=5; 

Как это сделать в Java?

+5

Вы расширяете класс там. Кроме того, вы не можете. –

+0

Да ладно, должен быть путь. – oneat

+0

Есть способ, но не там. – Alan

ответ

1

Невозможно добавить переменные в класс без его расширения. Тем не менее, расширение класса не нужно называть: вместо этого вы можете использовать анонимный класс, аналогично фрагменту из вашего сообщения.

Хитрость, однако, чтобы получить доступ к переменной после того, как вы добавили его: вы могли бы сделать это мутирует объекты, на которые ссылается из класса, как это:

// Prepare a mutable object for use in your class 
final AtomicInteger a = new AtomicInteger(123); 
Button b = new Button(){ 
    public void someMethod() { 
     ... 
     int n = a.intValue(); 
     ... 
    } 
}; 

Когда вы устанавливаете вещи таким образом, изменения в состоянии a в вашем методе станут доступными для someMethod() анонимного подкласса класса Button.

0

Без расширения класса? Сожалею. Вы делаете расширяющийся класс. Привыкай к этому.

public class OneAtButton extends Button { 
    public int aWellNamedClassMemberVariable; 

    OneAtButton() { // constructor 
     aWellNamedClassMemberVariable = 5; 
    } 

} // class OneAtButton 
1

Похоже, вы хотите, чтобы пользовательский объект Button.

Просто создайте новый класс с расширениями Button и объявите в этом классе переменную a и любые другие методы, которые вы хотите добавить.

Что-то вроде

public class SomeClass extends Button 
{ 
    public int a; 
} 

public class SomeOtherClass 
{ 
    public static void main(String args[]) 
    { 
     SomeClass someClass = new SomeClass(); 
     someClass.a = 5; 
    } 
} 

Если на самом деле вы не хотите, чтобы расширить класс, то это невозможно. Сожалею.

Кроме того, ваш пример фактически создает анонимный класс, который расширяет Button.

+0

бинго. Бонусные баллы, если вы добавите строку вызова образца – sova

0

Вы не можете создать новую переменную для класса в той же строке, в которой вы создаете новый объект этого класса. Если вы хотите добавить новую переменную в класс кнопок, который у вас есть, измените класс, чтобы включить новую переменную, или создайте расширение класса, как говорит Жан-Франсуа Савард.

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