Java 泛型值。<SomeValue>

标签 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());
    }
}

我从来没有见过像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

最佳答案

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

使用 Google Guava 的 Optional举个例子:

Optional<String> email = Optional.<String>of(strEmail);

参见 Generic Types - Invoking generic methods

由于接口(interface)不能声明静态方法(对你的 java 感到羞耻),只需将你的方法声明为静态而忘记接口(interface),就像这样:

class Value<T> {

    public static <T> Value<T> createEmptyValue(){
        return null;
    }
}

关于Java 泛型值。<SomeValue>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930109/

相关文章:

Swift 类型推断和关联类型协议(protocol)

c# - 没有 lambda 表达式的 Entity Framework 查询

java - 运行时的通用类​​类型参数详细信息

java - 在 netbeans 中调试的 Junit 测试比没有调试的情况下运行要慢得多

java - 升级到 Boot 1.2 后无法访问 Spring Boot 执行器健康端点

java - 一种将参数传递给方法的奇怪方式

c# - 无法在泛型方法中将类型更改为可为空

c# - 调用泛型方法的类型数组

java - 无法显示计算结果

java - 用户在 JFrame 中未输入任何内容并收到错误消息