В OpenSSL 1.0.1e все, что мне нужно сделать, это:
CC=~/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc ./Configure android-armv7
ANDROID_DEV=~/android-ndk-r9//platforms/android-8/arch-arm/usr make build_libs
Я знаю, что ответ Джона Скита был принят, но он не совсем правильный. Ограничения накладывает не столько JVM, сколько язык Java. Целью разработки Scala является максимально простой вызов из Java, а в Java нет концепции перегрузки имени класса на основе арности параметра типа. Например, простой способ реализовать перегрузку на основе параметров типа в JVM - это изменить имя. Однако такое искажение имени должно быть видимым для Java и было бы некрасиво. В вашем примере гипотетический Scala может компилировать два класса, Foo_ $ 1 и Foo_ $ 2. Scala может сделать это искажение невидимым. Однако программист на Java увидел бы все это безобразие.
Отчасти это может быть связано с аналогичными ограничениями Java. Насколько я понимаю, Scala в основном используется на JVM, где вы не можете перегрузить универсальные типы по арности.
Похоже, Scala также использует стирание типов для своих универсальных типов. , даже в порте .NET. (В той же статье упоминается, что в Scala были дженерики задолго до того, как это стало на самом деле в Java, поэтому даже если Java и поддерживала это, нет никакой гарантии, что Scala будет - они были несколько ограничены, когда впервые разработали эту функцию.)
]Я полагаю, это сделано для упрощения сопоставления с Java, имеющей такое же ограничение.
Можно было бы немного изменить имя, но ценой обеспечения взаимодействия с Java труднее. На мой взгляд, они приняли правильное решение.