Java 返回类型为泛型的方法对象?

Java 返回类型为泛型的方法对象?,java,generics,Java,Generics,在Java中,有没有办法将泛型与类一起使用?我想调用Method对象,让它返回方法的实际返回类型,而不是。正如JB Nizet所说的,你不能更改JRE方法,但你可以在执行之前、执行之后或执行前后做一些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring AOP、google it它将是你的朋友,正如JB Nizet所说,你不能更改JRE方法,但你可以在执行前、执行后或执行前后做些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring

在Java中,有没有办法将泛型与类一起使用?我想调用Method对象,让它返回方法的实际返回类型,而不是。

正如JB Nizet所说的,你不能更改JRE方法,但你可以在执行之前、执行之后或执行前后做一些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring AOP、google it它将是你的朋友,正如JB Nizet所说,你不能更改JRE方法,但你可以在执行前、执行后或执行前后做些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring AOP、google it它将是你的朋友,正如JB Nizet所说,你不能更改JRE方法,但你可以在执行前、执行后或执行前后做些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring AOP、google it它将是你的朋友,正如JB Nizet所说,你不能更改JRE方法,但你可以在执行前、执行后或执行前后做些事情,您可以更改使用AOP技术(如aspectJ、spring AOP、google it)的方法返回的返回值/对象它将是您的朋友

您不能扩展
方法
,因为尽管它不是
最终的
,但它没有可访问的构造函数

你可以用合成来做类似的事情

public final class MyMethod<T> {

    private final Method method;

    public MyMethod(Method method) {
        this.method = method;
    }

    public T invoke(Object o, Object... args) throws IllegalAccessException, InvocationTargetException {
        return (T) method.invoke(o, args);      // Unchecked cast
    }
}
公共最终类MyMethod{
私人最终方法;
公共MyMethod(方法){
这个方法=方法;
}
公共T调用(对象o,对象…参数)抛出IllegalAccessException,InvocationTargetException{
return(T)method.invoke(o,args);//未选中强制转换
}
}
你可以这样使用它

MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));
MyMethod-MyMethod=newmymethod(biginger.class.getMethod(“intValue”);
整数a=myMethod.invoke(新的BigInteger(“42”);
但是,这并不好(例如,未经检查的强制转换和已检查的异常)


我怀疑这是一个XY问题。关于您究竟需要它做什么的一些详细信息将使回答更容易。

您不能扩展
方法
,因为尽管它不是
最终的
,但它没有可访问的构造函数

你可以用合成来做类似的事情

public final class MyMethod<T> {

    private final Method method;

    public MyMethod(Method method) {
        this.method = method;
    }

    public T invoke(Object o, Object... args) throws IllegalAccessException, InvocationTargetException {
        return (T) method.invoke(o, args);      // Unchecked cast
    }
}
公共最终类MyMethod{
私人最终方法;
公共MyMethod(方法){
这个方法=方法;
}
公共T调用(对象o,对象…参数)抛出IllegalAccessException,InvocationTargetException{
return(T)method.invoke(o,args);//未选中强制转换
}
}
你可以这样使用它

MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));
MyMethod-MyMethod=newmymethod(biginger.class.getMethod(“intValue”);
整数a=myMethod.invoke(新的BigInteger(“42”);
但是,这并不好(例如,未经检查的强制转换和已检查的异常)


我怀疑这是一个XY问题。关于您究竟需要它做什么的一些详细信息将使回答更容易。

您不能扩展
方法
,因为尽管它不是
最终的
,但它没有可访问的构造函数

你可以用合成来做类似的事情

public final class MyMethod<T> {

    private final Method method;

    public MyMethod(Method method) {
        this.method = method;
    }

    public T invoke(Object o, Object... args) throws IllegalAccessException, InvocationTargetException {
        return (T) method.invoke(o, args);      // Unchecked cast
    }
}
公共最终类MyMethod{
私人最终方法;
公共MyMethod(方法){
这个方法=方法;
}
公共T调用(对象o,对象…参数)抛出IllegalAccessException,InvocationTargetException{
return(T)method.invoke(o,args);//未选中强制转换
}
}
你可以这样使用它

MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));
MyMethod-MyMethod=newmymethod(biginger.class.getMethod(“intValue”);
整数a=myMethod.invoke(新的BigInteger(“42”);
但是,这并不好(例如,未经检查的强制转换和已检查的异常)


我怀疑这是一个XY问题。关于您究竟需要它做什么的一些详细信息将使回答更容易。

您不能扩展
方法
,因为尽管它不是
最终的
,但它没有可访问的构造函数

你可以用合成来做类似的事情

public final class MyMethod<T> {

    private final Method method;

    public MyMethod(Method method) {
        this.method = method;
    }

    public T invoke(Object o, Object... args) throws IllegalAccessException, InvocationTargetException {
        return (T) method.invoke(o, args);      // Unchecked cast
    }
}
公共最终类MyMethod{
私人最终方法;
公共MyMethod(方法){
这个方法=方法;
}
公共T调用(对象o,对象…参数)抛出IllegalAccessException,InvocationTargetException{
return(T)method.invoke(o,args);//未选中强制转换
}
}
你可以这样使用它

MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));
MyMethod-MyMethod=newmymethod(biginger.class.getMethod(“intValue”);
整数a=myMethod.invoke(新的BigInteger(“42”);
但是,这并不好(例如,未经检查的强制转换和已检查的异常)


我怀疑这是一个XY问题。关于您到底需要它做什么的一些细节将使回答更容易。

嗯,invoke()的返回类型是Object,除了替换JDK开发团队的负责人Brian Goetz并决定在Java 9中对其进行更改外,没有其他方法可以改变这一点。您不能在Java中更改方法。无法将非泛型方法变为泛型。@JBNizet由于没有其他选择,您可以将其作为答案发布吗?嗯,invoke()的返回类型是Object,除了替换JDK开发团队的负责人Brian Goetz并决定在Java 9中对其进行更改外,没有其他方法可以更改它。您不能在Java中更改方法。无法将非泛型方法变为泛型。@JBNizet由于没有其他选择,您可以将其作为答案发布吗?嗯,invoke()的返回类型是Object,除了替换JDK开发团队的负责人Brian Goetz并决定在Java 9中对其进行更改外,没有其他方法可以更改它。您不能在Java中更改方法。没有办法使非泛型方法变为通用方法