BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Грешка в ламбда израз
thrawn
Публикувано на: 14-09-2017, 11:17
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1187
Регистриран на: 17.01.17



Някой може ли да каже, какво не му е на ред на това?

CODE
((FilteredList)ownerComboBox.getItems()).setPredicate((OwnerModel m) -> m.getName().toLowerCase().contains(key.toLowerCase().trim()));


Съобщението за гешка е
QUOTE
error: method setPredicate in class FilteredList<E> cannot be applied to given types;
((FilteredList)ownerComboBox.getItems()).setPredicate((OwnerModel m) -> m.getName().toLowerCase().contains(key.toLowerCase().trim()));
                                        ^
  required: Predicate
  found: (OwnerMode[...]im())
  reason: argument mismatch; incompatible parameter types in lambda expression
  where E is a type-variable:
    E extends Object declared in class FilteredList


Ако направя същата постановка с анонимна инстанция всичко си бачка
CODE
((FilteredList)ownerComboBox.getItems()).setPredicate(new Predicate<OwnerModel>() {
      @Override
      public boolean test(OwnerModel m) {
            return m.getName().toLowerCase().contains(key.toLowerCase().trim());
      }
});



Платформата е
QUOTE
java version "1.8.0_141"
Java™ SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot™ 64-Bit Server VM (build 25.141-b15, mixed mode)


Това мнение е било редактирано от thrawn на 14-09-2017, 11:17
PMEmail Poster
Top
Lachezar
  Публикувано на: 14-09-2017, 11:31
Quote Post



Име: Лъчезар Добрев
Група: Потребител
Ранг: Почетен член

Мнения: 2646
Регистриран на: 10.11.04



Без декларацията на FilteredList.setPredicate и ownerComboBox.getItems ще е трудно.

Следното при мен се компилира:
CODE
public class OwnerTest {

    public static void main(String[ ] args) {
        // Declare references for compilation purposes. Code will CRASH with NPE.
        OwnerComboBox ownerComboBox = new OwnerComboBox();
        String key = "";

        // Copy-Pasted from OP code
        ((FilteredList) ownerComboBox.getItems()).setPredicate((OwnerModel m) -> m.getName().toLowerCase().contains(key.toLowerCase().trim()));
    }

    // Unknown class
    public static class FilteredList {
        public void setPredicate(Predicate<? super OwnerModel> predicate) {
        }
    }

    // Unknown class
    public static class OwnerComboBox {
        public Object getItems() {
            return null;
        }
    }

    // Unknown class
    public static class OwnerModel {
        public String getName() {
            return null;
        }
    }
}


Редакция: пренареждане на кода и форматиране.

Това мнение е било редактирано от Lachezar на 14-09-2017, 11:32


--------------------
И'м ватцхинг ъоу...
PMUsers Website
Top
thrawn
Публикувано на: 14-09-2017, 11:33
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1187
Регистриран на: 17.01.17



Това са си класове от javafx. Та би трябвало да ги има при теб, щото са си част от jdk-то.

---едит---
ownerComboBox е ComboBox a това е list-ът

Това мнение е било редактирано от thrawn на 14-09-2017, 11:38
PMEmail Poster
Top
Lachezar
  Публикувано на: 14-09-2017, 11:35
Quote Post



Име: Лъчезар Добрев
Група: Потребител
Ранг: Почетен член

Мнения: 2646
Регистриран на: 10.11.04



QUOTE (thrawn @ 14-09-2017, 11:33)
Това са си класове от javafx. Та би трябвало да ги има при теб, щото са си част от jdk-то.

Ъъъ.. Не. Аз този ъгъл дори не помирисвам.
Нямам JavaFX в нито едно от моите JDK icon_lol.gif
Нека да погледна как се включва това.

Намерих:
CODE
user@host:~$ sudo apt-get install openjfx


Това мнение е било редактирано от Lachezar на 14-09-2017, 11:38


--------------------
И'м ватцхинг ъоу...
PMUsers Website
Top
thrawn
Публикувано на: 14-09-2017, 11:39
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1187
Регистриран на: 17.01.17



E то FX-а е част от SE-то вече.
Ако искаш, мога да ги извадя двата файла и да ги кача тук.

Това мнение е било редактирано от thrawn на 14-09-2017, 11:44
PMEmail Poster
Top
Lachezar
  Публикувано на: 14-09-2017, 11:57
Quote Post



Име: Лъчезар Добрев
Група: Потребител
Ранг: Почетен член

Мнения: 2646
Регистриран на: 10.11.04



CODE
((FilteredList<OwnerModel>) ownerComboBox.getItems()).setPredicate((m) -> m.getName().toLowerCase().contains(key.toLowerCase().trim()));

Класът FilteredList е генерализиран и няма естествен тип. Каст без специализиране става FilteredList<Object>.


--------------------
И'м ватцхинг ъоу...
PMUsers Website
Top
thrawn
Публикувано на: 14-09-2017, 12:01
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1187
Регистриран на: 17.01.17



10х, захапа.

Само в последствие m трябва да се кастне обратно до OwnerModel
CODE
((FilteredList)ownerComboBox.getItems()).setPredicate((m) -> ((OwnerModel)m).getName().toLowerCase().contains(key.toLowerCase().trim()));


---едит---
Така май е по-чисто
CODE
((FilteredList<OwnerModel>)ownerComboBox.getItems()).setPredicate((OwnerModel m) -> m.getName().toLowerCase().contains(key.toLowerCase().trim()));


Това мнение е било редактирано от thrawn на 14-09-2017, 12:05
PMEmail Poster
Top
Lachezar
Публикувано на: 14-09-2017, 12:01
Quote Post



Име: Лъчезар Добрев
Група: Потребител
Ранг: Почетен член

Мнения: 2646
Регистриран на: 10.11.04



QUOTE (thrawn @ 14-09-2017, 12:01)
10х, захапа.

Само в последствие m трябва да се кастне до OwnerModel
CODE
((FilteredList)ownerComboBox.getItems()).setPredicate((m) -> ((OwnerModel)m).getName().toLowerCase().contains(key.toLowerCase().trim()));

Мммм... Не.
Виж как съм кастнал самия FilteredList, и няма нужда от изрични кастове в самия предикат.


--------------------
И'м ватцхинг ъоу...
PMUsers Website
Top
thrawn
Публикувано на: 14-09-2017, 12:05
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1187
Регистриран на: 17.01.17



Дам, и аз го стоплих в последствие.

Благодаря още един път.
PMEmail Poster
Top
Реконструктор
Публикувано на: 14-09-2017, 13:54
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 290
Регистриран на: 18.12.06



Не знам защо ви трябва да се занимавате с ламбди в джавата. Струва ми се напълно излишно.
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0