gpt4 book ai didi

java - 如何获取泛型类的 "real"类型?

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

好吧,问题标题可能没有意义......主要是因为我不知道如何解释它。

这是我所拥有的:

class SomeClass 
{
private Class paramType;
private SomeInterface<?> someObject;
}

public interface SomeInterface<T>
{
public void foo(T in);
}

变量someObject可能会被分配为这样的:

someObject = new SomeInterface<Integer> { ... }

我希望能够调用 someObject 上的通用方法像这样:

someObject.foo(paramType.cast(someVariable));

问题在于 someObject 的类型为 SomeInterface。现在,有什么办法可以得到 someObjects的 REAL 类型以便我可以正确调用该方法?

我知道我可以使用反射并执行类似 .getMethod("foo", paramType); 的操作但是,我不喜欢“foo”必须由客户端进行硬编码这一事实。如果您能找到一种更强大的方法来调用该方法,我也对此持开放态度。

有什么想法吗?抱歉,如果这不太有意义……如果您认为您可以更好地解释它,请随意编辑:)。

编辑:一些功能性设计,因为我走这条路可能看起来很疯狂:)。

基本上,我正在制作一个框架,允许客户端 Hook 某些事件。一个例子是:

SomeClass.addHandler(Integer.class, new SomeInterface<Integer> {
public void foo(Integer in)
{
// do something
}});

所以,我基本上是在尝试编写事件触发函数。走这条路线的优点是客户端不必担心强制转换任何内容,并且具有类型安全性(例如,我可以将 addHandler 参数限制为 SomeInterface<bar>)。

“调用者”只需将数据获取到适当的对象(简单)并使用该对象调用 SomeInterface 的方法(困难)。

我几乎要放弃了,可能只能让客户来选角,但我已经很接近了!

最佳答案

您还需要参数化 addHandler() 方法。然后 Actor 阵容就会起作用。

public <T> void addHandler(Class<T> paramType, SomeInterface<T> someObject) {
someObject.foo(paramType.cast(someVariable));
}

关于java - 如何获取泛型类的 "real"类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740204/

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