Как вызвать метод T eq (Object) интерфейса Java из Scala?

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 в VMWare? Я пытаюсь подключиться к Я пробовал различные комбинации настроек, но ни одна из них не работает:...

Я пытаюсь подключиться к серверу разработки Django, работающему в OS X localhost: 8000, из VMWare под управлением Windows.

Я пробовал различные комбинации настроек, но ни одна из них не работает:

  • Запуск сервера Django на локальном хосте: 8000, а в Windows - подключение к IP-адресу, назначенному Mac VMWare, т.е. 192.168.XX.XX:8000
  • Запуск сервера Django на порте 80
  • Запуск сервера Django на IP Mac, назначенном VMWare, например, python manage.py runserver 192,168 .XX.XX: 8000

Ни один из них не работает. У меня сервер Apache также работает локально, и я могу подключиться к нему, так что это не проблема с сетью. Существует ли какой-либо способ подключения к локальному хосту: 8000 из VMWare?

Обновление : Для этого я использовал следующие настройки:

  • В VMWare установите для сети виртуальной машины значение "Подключиться непосредственно к физической сети (Bridged), "а не" Share this Mac's network connection (NAT) "
  • Найдите IP-адрес самого Mac в сети, в которой находится сам Mac (а не в частной сети VMWare), например 192.168.1.2. Это можно найти в ifconfig, или в System Preferences > Network
  • Запустите сервер разработки Django на этом IP-адресе: sudo python manage.py runserver 192.168.1.2: 80
  • В VMWare подключитесь к сайту Django по адресу 192,168,1,2

Благодаря randrumree для ответа ниже - это по существу то же самое.

10
задан LS55321 1 September 2011 в 20:01
поделиться