Scala определяет класс AnyRef, который после компиляции интерпретируется как класс объекта Java. Класс AnyRef, однако, не совсем эквивалентен Object с точки зрения языка, поскольку вводит несколько новых методов, таких как eq(), который принимает AnyRef и возвращает логическое значение и сравнивает ссылки для идентификатора
Если в Java существует класс, который сам определяет eq() метод с другим типом результата и интерфейс, который этот класс реализует, также имеющий этот метод:
public interface I {
String eq(Object that);
}
public class A implements I {
public String eq(Object that) {return "";}
}
тогда его метод eq становится недоступным для кода Scala, если вызывается через ссылку на интерфейс
val i: I = new A
val a = new A
val b = Some(1) //whatever actually
val s1: String = a.eq(b) //compiles OK
val s2: String = i.eq(b) //compilation error
Метод eq, о котором знает Scala, является методом eq из класса AnyRef, который «приклеивается» к интерфейсу I, который пришел из Java без этого метода, но с собственным методом eq () с другим типом результата. Я могу объяснить это поведение, но не могу решить реальную задачу, когда мне приходится вызывать этот метод Java eq () без возможности изменения кода библиотеки сторонних разработчиков Java. А именно, я говорю о Liferay и его динамическом API запроса и интерфейсе com.liferay.portal.kernel.dao.orm.Property. Он имеет метод eq (), берущий Object и возвращающий Criterion. Этот код не будет скомпилирован в Scala:
val query = DynamicQueryFactoryUtil.forClass(classOf[BookmarksEntry])
.add(PropertyFactoryUtil.forName("folderId").eq(new Long(folderId)))
, так как eq не будет интерпретироваться правильно. Просто говоря, класс Property имеет еще одну перегрузку метода eq (), который принимает DynamicQuery в качестве параметра. Эта перегрузка доступна из Scala.
Знаете ли Вы какой-либо способ вызова метода eq (Object) интерфейса Java из Scala?
Используемая версия Scala 2.8.1
-121--1089473-Я пытаюсь подключиться к серверу разработки Django, работающему в OS X localhost: 8000, из VMWare под управлением Windows.
Я пробовал различные комбинации настроек, но ни одна из них не работает:
Ни один из них не работает. У меня сервер Apache также работает локально, и я могу подключиться к нему, так что это не проблема с сетью. Существует ли какой-либо способ подключения к локальному хосту: 8000 из VMWare?
Благодаря randrumree для ответа ниже - это по существу то же самое.