Как бы я создал объект, который использует поведение типа String для создания? - PullRequest
1 голос
/ 14 апреля 2010

Я хотел бы иметь возможность создавать объект, который создается как объект String, и при создании проверяет, что значение String является подходящей опцией.

IE SpecificString может иметь значение "Bob" или "Джим".

SpecificString BadName = "Sam" // Выдает исключение SpecificString GoodName = "Bob" // Не выдает исключение.

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

printf (SpecificString);// выводит Боба.

Возможно ли это?

Ответы [ 6 ]

2 голосов
/ 14 апреля 2010

Как уже было сказано, использование оператора = невозможно.

Для printf(SpecificString) вы должны переопределить Object.toString():

@Override
public String toString(){
    //return a String representation of the Object;
}
2 голосов
/ 14 апреля 2010

Если вопрос , можно ли его создать как String aka. Строка s = "foo" ответ - нет. Только строки могут быть построены таким образом, а строка является окончательной, поэтому вы не сможете определить дочерний класс для нее ...

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

2 голосов
/ 14 апреля 2010

Вы, вероятно, хотите использовать enum для этого. Перечисления были введены в Java в версии 1.5. О них вы можете прочитать в официальной документации здесь .

Если по какой-либо причине вы не можете использовать Java 1.5, библиотека Apache commons-lang имеет достаточно хорошую замену.

1 голос
/ 14 апреля 2010

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

В этом случае я бы пошел на Enums. Просто используйте стандартные Enums, если вы используете последнюю версию Java, или сверните «старую» версию DIY, которая, возможно, больше подходит для вашей конкретной проблемы.

Пример последнего см. this

1 голос
/ 14 апреля 2010

РЕДАКТИРОВАТЬ: Ой, подумал, что это вопрос C # для начала:)

Java не допускает пользовательских преобразований, поэтому это не сработает так, как вы показали. Вам понадобится статический Parse метод или конструктор, или что-то подобное.

Если разрешены только определенные значения, можете ли вы использовать перечисление вместо?

0 голосов
/ 14 апреля 2010

Вы не можете. Но если бы вы могли сделать это, было бы невозможно отличить нормальное атрибутирование от того, которое выдает исключение (при условии, что ваше исключение не проверено) или что-либо делать с атрибуцией. Используя вызов метода, вы ясно дадите понять кому-то из вашего класса, что существует некоторая проверка, и в Eclipse я мог видеть, что это за проверка, с помощью ctrl + click.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...