相关疑难解决方法(0)

泛型方法的实现中的不同返回值类型

今天我偶然发现了一些我甚至无法编译的Java代码.减少到最低限度,它看起来像这样:

import java.util.List;

interface A {
    <T> List<String> foo();
}

interface B {
    <T> List<Integer> foo();
}

class C implements A, B {
    @Override
    public List<?> foo()
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

乍一看,类型参数<T>foo的方法AB自看起来不必要T,不使用其他任何地方.无论如何,我发现这在允许冲突的返回值类型在同一个实现中共存起着至关重要的作用:如果<T>省略了一个或两个,则代码不会编译.这里的非工作版本:

import java.util.List;

interface A {
    List<String> foo();
}

interface B {
    List<Integer> foo();
}

class C implements A, B {
    @Override
    public List<?> foo()
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不需要修复上面的代码片段,因为这些只是我用来解释我的观点的例子.我只是很想知道编译器为什么表现不同.有人可以解释一下这些规则究竟有什么不同吗?

java generics interface

34
推荐指数
1
解决办法
1685
查看次数

是否可以使用Gson.fromJson()来获取ArrayList <ArrayList <String >>?

假设我有一个json数组数组

String jsonString = [["John","25"],["Peter","37"]];
Run Code Online (Sandbox Code Playgroud)

我想把它变成ArrayList<ArrayList<String>>对象.当我用的时候

Gson.fromJson(jsonString,ArrayList<ArrayList<String>>.class)

它似乎没有用,我通过使用做了一个工作

Gson.fromJson(jsonString,String[][].class)

有一个更好的方法吗?

java generics arraylist gson

30
推荐指数
1
解决办法
4万
查看次数

标签 统计

generics ×2

java ×2

arraylist ×1

gson ×1

interface ×1