gpt4 book ai didi

java - Java 中的元泛型

转载 作者:行者123 更新时间:2023-12-01 18:23:19 25 4
gpt4 key购买 nike

我 99% 确定这是不可能的,但我认为值得一试:是否可以创建一个实现模板的类?

动机:我想创建一个通用的复合类。

示例:

public class GenericComposite<T> implements T {
List<T> m_items;

void add(T item) {
m_items.add(item);
}

@Override
void f() {
for (T item : m_items) {
item.f();
}
}
}

其中f是接口(interface)T中定义的方法。当然,我们不知道调用它时它会是f(),也不知道在哪里实现它。是否有一些我不知道的元元魔法使这成为可能?如果没有,是否有其他语言支持此功能?

最佳答案

你是对的,这在 Java 中是不可能的:编译器甚至无法确定 Tinterface (与 class 相对),因此它不能让您实现 T .

C++ 通过模板提供了这种可能性,但即使这样也无法帮助您实现“通用复合 Material ”。问题是f()方法(或其代表的实际类中的方法)。你想写的是这样的:

// This is not going to work! The syntax is not real.
public class GenericComposite<T> implements T {
List<T> m_items;

void add(T item) {
m_items.add(item);
}

@Override
<all-methods-of-T>();
}

为了写@Override void f()你一定知道Tvoid f() 。您需要了解T的每一个方法。 ,这当然违背了隐藏的目的T首先是您的身份:您的GenericComposite<T>了解有关接口(interface)的所有信息,即它的所有方法。

当您构建组合时,拥有子元素列表的问题比实现让调用者以与处理叶对象相同的方式处理组合的方法要小得多。所有这些“聚合”方法始终是自定义的,使得复合的通用结构实现几乎毫无用处。

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

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