Java Generics Value.<SomeValue>

Eri*_*ric 8 java generics

我进行了面试测试并看到以下代码:

编辑:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我从来没有见过Java泛型

Value.<SomeValue>
Run Code Online (Sandbox Code Playgroud)

测试是使用上面给定的单元测试代码实现Value类.

我试图找出下面的Value方法签名(需要实现):

public interface Value<T> {

    public boolean hasValue();
    public Value<T> createEmptyValue();
}
Run Code Online (Sandbox Code Playgroud)

有谁知道,请帮帮忙?

谢谢

编辑:根据@marlon下面的答案应该是这样的

public class Value<T> {

    public boolean hasValue(){}
    public static <M> Value<M> createEmptyValue(){}; //need <M>
}
Run Code Online (Sandbox Code Playgroud)

要知道的关键语法:

Value.<SomeValue>  //ClassName.<Type>method
Run Code Online (Sandbox Code Playgroud)

是使用参数化参数调用类的静态方法的方法.

编辑:根据@ snipes83,语法调用带参数化参数的类的非静态方法.

SomeObject.<Type>method
Run Code Online (Sandbox Code Playgroud)

Mar*_*des 6

Value.<SomeValue> 这是方法表示泛型的方式.

以Google Guava Optional为例:

Optional<String> email = Optional.<String>of(strEmail);
Run Code Online (Sandbox Code Playgroud)

请参阅通用类型 - 调用泛型方法

由于接口不能声明静态方法(对java很遗憾),只需将方法声明为静态并忘记接口,如下所示:

class Value<T> {

    public static <T> Value<T> createEmptyValue(){
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 静态与它无关,虽然在这种情况下它似乎是静态方法.可以键入实例和静态方法 (3认同)