Хотя я не знаю, что сделал Spring Framework и почему, я могу показать вам, как анализировать вашу строку в простой Java:
DecimalStyle defaultDecimalStyle
= DateTimeFormatter.ISO_LOCAL_DATE.getDecimalStyle();
DateTimeFormatter arabicDateFormatter = DateTimeFormatter.ISO_LOCAL_DATE
.withDecimalStyle(defaultDecimalStyle.withZeroDigit('\u0660'));
String encodedArabicDateStr = "%D9%A2%D9%A0%D9%A1%D9%A9-%D9%A0%D9%A4-%D9%A1%D9%A5";
String arabicDateStr
= URLDecoder.decode(encodedArabicDateStr, StandardCharsets.UTF_8);
LocalDate date = LocalDate.parse(arabicDateStr, arabicDateFormatter);
System.out.println("Parsed date: " + date);
Вывод из этого фрагмента :
Дата анализа: 2019-04-15
blockquote>Единственная хитрость заключается в том, чтобы сообщить форматировщику, чтобы он анализировал арабские цифры. Когда мы сообщаем ему нулевую цифру (
٠
или'\u0660'
), она вычисляет другие цифры.
Нет, это не похоже на Objective-C и некоторые другие языки. Вы должны явно объявить реализацию интерфейса.
Duck Typing
Что вы упоминание упоминается как « типизирование утки » (названное в честь идиомы «если оно похоже на утку и крякает как утка, то это должна быть утка»).
С утиной типизацией реализация интерфейса неявна, как только вы внедрили соответствующие элементы (как вы и описали), однако .NET в настоящее время не имеет широкой поддержки для этого.
С появившимися динамическими языковыми возможностями, запланированными для В будущем я не удивлюсь, если бы это было изначально поддержано средой выполнения в ближайшем будущем.
В то же время вы можете синтезировать типизацию утки с помощью рефлексии с помощью такой библиотеки, как эта , который позволил бы вам выполнять приведение типа утки, например, так: IDoo myDoo = DuckTyping.Cast
Некоторые мелочи
Интересно, что есть одно небольшое место, где набирается утка используется в C # сегодня - оператор foreach
. Кшиштоф Квалина утверждает , что для того, чтобы его можно было перечислить оператором foreach
,
который не принимает параметров и возвращает
тип с двумя членами: а) метод
MoveMext, который не принимает параметров и
вернуть логическое значение, и б) свойство
Ток с геттером, который возвращает
Object.
Обратите внимание, что он не упоминает ни IEnumerable
, ни IEnumerator
. Хотя эти интерфейсы обычно реализуют при создании перечислимого класса, если вы отбросили интерфейсы, но оставили реализацию, ваш класс все равно был бы перечисляемым с помощью foreach
. Вуаля! Duck-типирование! ( Пример кода здесь .)
При условии, что у IDoo есть какие-либо члены, этот код не будет компилироваться. Если у IDoo нет участников, тогда да, приведение безопасно (но очевидно ограниченного использования).
Для этого в основном потребуется Duck Typing для работы в C #, что не происходит автоматически.
Однако есть некоторые библиотеки , которые могут это делать.
public class A
{
public void DoSomething();
}
public interface IDoSomething
{
void DoSomething();
}
public class B : A, IDoSomething
{ }
B удовлетворяет IDoSomething.DoSomething, наследуя от A