gpt4 book ai didi

java - 关于java中的泛型和列表

转载 作者:行者123 更新时间:2023-11-30 03:51:37 24 4
gpt4 key购买 nike

我有这个简单的界面:

public interface Transportable<T> { 
public T getTransport();
}

还有很多提供实现的类,即:

class A implements Transportable<ATransport> {
public ATransport getTransport() {
ATransport at=new ATransport();
[...]
return at;
}
}
class B implements Transportable<BTransport> {
public BTransport getTransport() {
BTransport bt=new BTransport();
[...]
return bt;
}
}

我还有可传输对象的列表,如下所示:

LinkedList<A> aList=new LinkedList<>();

我想为 aList 中的所有元素调用 getTransport 方法,获取 LinkedList,执行类似的操作:

LinkedList<ATransport> atList = getTransport(aList);
LinkedList<BTransport> btList = getTransport(bList);

我不想为我拥有的每个类编写一个 foreach,有没有办法使用泛型来实现它?像:

public <T> List<???> getTransport(List<T> list)

或者类似的东西?我已经尝试过,但没有运气,我想我错过了一些关于泛型以及使用或等之间的区别的东西......

谢谢!

最佳答案

这似乎有效:

package dummy;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

class ATransport{}
class BTransport{}
class A implements Transportable<ATransport> {
public ATransport getTransport() {
ATransport at=new ATransport();
return at;
}
}
class B implements Transportable<BTransport> {
public BTransport getTransport() {
BTransport bt=new BTransport();
return bt;
}
}
class X {
public static <U, T extends Transportable<U>> List<U> getTransport(List<T> list) {
List<U> ret = new LinkedList<>();
for (T t : list) {
ret.add(t.getTransport());
}
return ret;
}

public static void main(String[] args) {
List<BTransport> transportsB = getTransport(Collections.singletonList(new B()));
List<ATransport> transportsA = getTransport(Collections.singletonList(new A()));
}
}

这背后的想法是我们命名我们需要的类型和我们得到的内容。唯一的技巧是创建为静态方法,这样类型推断就可以在那里工作。 (就像在 Collections.singletonList 调用中一样。)

编辑: This是一个泛型教程,解释了静态方法技巧和一些其他类型推断用例。 This似乎是泛型的有用资源。基本思想(命名其他类型并在绑定(bind)中使用)可能有一个我不知道的更通用的名称,很抱歉没有提供对此的引用。

关于java - 关于java中的泛型和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24292827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com