Interfejsy parametryzowane

0

Witam

Czy ktoś mógł by mi wytłumaczyć jak działa interfejs z podanym konkretnym typem jako paramatryk? I jakie może mieć zastosowanie?

interface SomeInterface<String> {...} 
3

Nie da się tak zrobić. Tzn no to jest taki hax, bo w twoim przykładzie String to NIE JEST klasa String tylko nazwa parametru :) Równie dobrze mógłbyś tam mieć T albo S. Robi się tak czasem, żeby było bardziej jasne który parametr jest który, np. MyInterface<Key, Value, Handler>, może dla osoby która to implementuje bardziej czytelne niż MyInterface<K, V, H>

0

To ma sens. Dzięki za odpowiedzi.

1

Da się skompilować. :)

public interface Hello<String> {

    java.lang.String hello();
}

public class HelloImpl<String> implements Hello<String> {

    @Override
    public java.lang.String hello() {

        return "hello";
    }
}

public class HelloImplTest {

    @Test
    public void hello() {

        HelloImpl<Object> hello = new HelloImpl<>();
        String h = hello.hello();
        assertThat(h, is("hello"));
    }
}
Shalom napisał(a):

Robi się tak czasem

Częściej będzie

/**
 *
 * @param <T>
 */
public interface Hello<T> {

    String hello(T t);
}
0

No tak kompiluje się ale co to daje?

0

Jeśli to nie jest temat z jakiegoś zakręconego interview to wytłumaczył to ładnie @Shalom
To tylko literki, można coś opisać w pokręcony sposób w definicji interfejsu, w doc, w testach, w dokumentacji.

Może to być bardzo dobre ćwiczenie/doświadczenie dla wyciskania do max środowiska w którym się czujesz najlepiej zapominając, że mogą pracować w projekcie ludzie po prostu znający to środowisko na tyle, żeby w nim pracować.

Gdybym ja usłyszał: Tak nie można, to pierwsza myśl - nie skompiluje się bo...

Bardzo dużo za piszącego kod robią różne Eclipsy, JetBrainsy. Akceptacja domyślnej autouzupełniającej propozycji i pchać dalej.

Dorzucę kwestię jasności komunikacji. Kto nienawidził pisania wypracowań ma nad czym popracować ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1