LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

Если я правильно читал документацию и учебник, то получается так написать дял строк нельзя: str[2];

Нельзя.

Доступ по [] не поддерживается ни строкамми, ни в инфрастуктуре коллекций. Если я правильно понимаю, то в частности это связано с тем что в java нельзя перегрузить оператор. Допустим, но почему тогда не внести изменение в компилятор, то есть по каким мотивам такой способ доступа не поддерживается? Или все поддерживается, а я все не так понял ?

В Java четкое разделение между примитивными типами и классами. У классов никакой магии нет, с объектом можно сделать ровно одну вещь — использовать оператор "." для вызова метода или обращения к полю класса. Все остальные операторы связаны с примитивными типами или массивами.

Одно исключение — оператор «+» (и +=) применим к классу String.

Хорошо это или плохо — есть разные точки зрения и разные языки по-разному подходят к этому. Могу сказать, что большой проблемы отсутствие перегрузки операторов не вызывает.

Лично моё мнение — в Java следовало бы сделать встроенные перегрузки арифметических операций для классов типа BigInteger и перегрузку [] для List и CharSequence аналогично тому, как перегрузка + сделана для String. В общем, чтобы в своем коде использовать нельзя было, а для библиотечных классов можно. Но не сделали.

Исходная версия Legioner, :

Если я правильно читал документацию и учебник, то получается так написать дял строк нельзя: str[2];

Нельзя.

Доступ по [] не поддерживается ни строкамми, ни в инфрастуктуре коллекций. Если я правильно понимаю, то в частности это связано с тем что в java нельзя перегрузить оператор. Допустим, но почему тогда не внести изменение в компилятор, то есть по каким мотивам такой способ доступа не поддерживается? Или все поддерживается, а я все не так понял ?

В Java четкое разделение между примитивными типами и классами. У классов никакой магии нет, с объектом можно сделать ровно одну вещь — использовать оператор "." для вызова метода или обращения к полю класса. Все остальные операторы связаны с примитивными типами или массивами.

Одно исключение — оператор «+» (и +=) применим к классу String.

Хорошо это или плохо — есть разные точки зрения и разные языки по-разному подходят к этому. Могу сказать, что большой проблемы отсутствие перегрузки операторов не вызывает.

Лично моё мнение — в Java следовало бы сделать встроенные перегрузки арифметических операций для классов типа BigInteger и перегрузку [] для List аналогично тому, как перегрузка + сделана для String. Но не сделали.