Java 我怎样才能得到“我的”呢;“真正的”;泛型类的类型?

Java 我怎样才能得到“我的”呢;“真正的”;泛型类的类型?,java,generics,Java,Generics,好吧,问题的标题可能没有意义。。。主要是因为我不知道怎么解释 以下是我所拥有的: class SomeClass { private Class paramType; private SomeInterface<?> someObject; } public interface SomeInterface<T> { public void foo(T in); } 我希望能够调用someObject上的通用方法,如下所示: someObjec

好吧,问题的标题可能没有意义。。。主要是因为我不知道怎么解释

以下是我所拥有的:

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

public interface SomeInterface<T>
{
    public void foo(T in);
}
我希望能够调用
someObject
上的通用方法,如下所示:

someObject = new SomeInterface<Integer> { ... }
someObject.foo(paramType.cast(someVariable));
问题在于someObject的类型为SomeInterface。现在,是否有某种方法可以获取
someObjects
的真实类型,以便正确调用该方法

我知道我可以使用反射并执行类似于
.getMethod(“foo”,paramType)的操作
有什么想法吗?抱歉,如果这不太合理。。。如果您认为可以更好地解释,请随意编辑:)

编辑:一些功能性设计,因为我走这条路线似乎很疯狂:)

基本上,我正在制作一个框架,允许客户端钩住某个事件。这方面的一个例子是:

SomeClass.addHandler(Integer.class, new SomeInterface<Integer> {
    public void foo(Integer in)
    {
        // do something
    }});
SomeClass.addHandler(Integer.class,新的SomeInterface{
公共void foo(整数in)
{
//做点什么
}});
我基本上是在写事件触发器函数。采用这种方法的优点是,客户端不必担心强制转换任何内容,并且具有类型安全性(例如,我可以将addHandler参数限制为
SomeInterface

“调用者”只需将数据放入适当的对象(简单)并使用该对象调用SomeInterface的方法(硬)


我几乎放弃了,可能只是想让客户不得不投下,但我太接近了

通常这是不可能的,就像在
列表上调用
add()
。如果你提供了你真正想要实现的更多细节和背景,人们可能会提出更好的解决方案

假设问题是这样的,给定

SomeInterface<?> x;
Object y;
编辑

您最好只在实现中使用“原始类型”,忘记

泛型为程序员提供了更多表示类型关系的方法,编译器可以检查这些方法。然而,它是有限的,例如,它不能表达这个问题中的类型关系,即使关系看起来简单明了


那不是世界末日。我们以前没有仿制药,我们活了下来。使用原始类型和静态类型用眼睛检查程序-您比编译器更了解对象类型。

您还需要参数化
addHandler()
方法。然后演员就可以工作了

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

发布一些您认为这是解决方案的功能需求会非常有用,因为这在很大程度上是朝着“糟糕的设计”的方向发展的。他不想在那里调用foo()。类型处理程序保存在映射中。稍后,当一个对象到达时,根据对象的类型查找处理程序,并将该对象提供给它的foo()。显然,这个问题存在歧义。我们拭目以待。
public <T> void addHandler(Class<T> paramType, SomeInterface<T> someObject) {
    someObject.foo(paramType.cast(someVariable));
}