Значение Java Generics. <SomeValue>

Я прошел собеседование и увидел следующий код:

РЕДАКТИРОВАТЬ:

public class TestValue {
    private Value<SomeValue> defaultValue;

    @Test
    public void Empty_Value_Has_No_Value() {
        Assert.assertFalse(Value.<SomeValue> createEmptyValue()
            .hasValue());
    }

    @Test
    public void Default_Value_IsEmpty() {
        Assert.assertEquals(Value.<SomeValue> createEmptyValue(),
            defaultValue);
    }

    @Test
    public void Non_Empty_Value_Has_Value() {
        Assert.assertTrue(new Value<SomeValue>(true, new SomeValue())
            .hasValue());
    }
}

Я никогда не видел Java как

Value.<SomeValue>

Тест заключается в реализации класса Value с указанным выше кодом модульного теста.

Я попытался выяснить сигнатуру метода Value ниже (нужна реализация):

public interface Value<T> {

    public boolean hasValue();
    public Value<T> createEmptyValue();
}

Кто-нибудь знает, пожалуйста, помогите?

Спасибо

РЕДАКТИРОВАТЬ: должно быть так в соответствии с ответами ниже @marlon

public class Value<T> {

    public boolean hasValue(){}
    public static <M> Value<M> createEmptyValue(){}; //need <M>
}

Синтаксис ключа, который нужно знать:

Value.<SomeValue>  //ClassName.<Type>method

способ вызвать статический метод класса с параметризованным аргументом

РЕДАКТИРОВАТЬ: в соответствии с @ snipes83, синтаксис для вызова нестатического метода класса с параметризованным аргументом.

SomeObject.<Type>method

Ответы на вопрос(4)

Ваш ответ на вопрос