我想创建一些实用程序方法,并且我希望它能够在不同的对象上工作,只要它们可以提供一个可读/写的 Integer 属性。
我知道“标准”方式是:
- 声明一些
IProvidesAccessToInteger具有setInteger和的接口getInteger。 - 宣布
MyUtility.doSomethingWonderful(IProvidesAccessToInteger obj) - 拨打电话
obj.setInteger和obj.getInteger。
但这有一个非常强烈的缺点,即它需要我想与之合作的所有这些类的合作,MyUtility不仅如此,而且即使某些类想要合作MyUtility,仍然只能.doSomethingWonderful()对这些类的一个预定领域进行合作。
我正在寻找一些语法,它允许以某种MyUtility.doSomethingWonderful(T obj, Method<Integer> getter, Method<Integer,Integer> setter)方式使用泛型来指定obj具有设置和设置 Integer 的两个方法的要求,并有某种方法可以在obj.
用不需要对象的静态方法做类似的事情也可能很有趣。
更新:正如我提到的反射,我想澄清一下,我知道可以使用反射来完成接近的事情。
但是,由于我不需要在运行时解析实际接口,我希望 JAVA 有某种方式来指定某种“接口实现映射”,这样如果我的要求是一个具有两种方法的对象,int ?()我void ?(int)可以指定类似的东西.doSomethingWonderful(?<int getter(),void setter(int)> obj),用某个具有的 object1 调用一次,int getInt()然后void setInt(int)用另一个具有的 object2调用一次,int getIntValue()并void setIntValue(int)通过在调用中指定object满足 by 的要求getInteger并getInt满足 by 的要求setInteger,setInt依此类推。可能使用类似 `.doSomethingWonderful((?)object1) 的调用语法
至少在理论上,我认为应该可以在编译时完成所有操作,并且不需要任何运行时反射。
也许正确的名称应该是匿名接口。
也就是说,我接受通过反射的运行时解决方案也可能是一种解决方案。