2012-01-02 3 views
1

Поскольку объекты статического поля создаются на уровне класса (и являются общими для всех объектов), является ли он статическим импортом в определенных полях и наследует (используя инструменты), все поля будут создавать одинаковый объем памяти?Как наследование статических полей влияет на производительность?

Для примера В этом ниже запрограммировано, сколько объектов MyOwn создано?

class MyOwn{} 

public interface ConstantIfc { 
    public final static MyOwn REF = new MyOwn(); 
} 

class A implements ConstantIfc {} 
class B implements ConstantIfc {} 

public class c { 
    public static void main(String... arg) { 
     A refA = new A(); 
     B refB = new B(); 
    } 
} 

Если это так же, как конечный постоянный класс для статического импорта лучше, чем постоянный интерфейс?

Обновление:
Я понял, что лучше избегать Inheritance для констант. Неправильное использование наследования реализации часто приводит к негибкому дизайну. Поэтому мы можем лучше пойти на статический импорт класса/интерфейса. но все же интерфейсы являются абстракцией и остаются абстрактными, они не должны содержать детали реализации (включая постоянные переменные). Интерфейсы также часто используются для описания публичного API, в котором детали реализации не принадлежат. По этой причине имеет смысл помещать постоянные данные в класс, а не в интерфейс. Спасибо robjb.

+2

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

ответ

1

В примере, который вы даете, есть только один объект MyOwn, который создается. Он создается в первый раз, когда ваша программа загружает интерфейс ConstantIfc.

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

+0

Спасибо большое !. Но я все еще не могу понять, почему Ineterfaces с только константами не допускаются. в чем проблема? Пожалуйста, объясните. или дать некоторые ссылки PLS. –

+0

Это не значит, что они не разрешены. Они просто обескуражены. Более подробную информацию можно найти здесь: http://en.wikipedia.org/wiki/Constant_interface –

1

Реализовать конструктор по умолчанию для MyOwn, сделать его println() и подсчитать для себя.

+0

Создается только один раз. поэтому для статического импорта в определенных полях или для наследования всех констант путем реализации постоянного интерфейса; оба будут создавать одну и ту же память? –

+0

@ Kanagavelu Sugumar: попробуйте следующее: –

+0

@Hannes R "попробуйте это" не доступно. –

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