我想创建一些实用程序方法,并且我希望它能够在不同的对象上工作,只要它们可以提供一个可读/写的 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) 的调用语法
至少在理论上,我认为应该可以在编译时完成所有操作,并且不需要任何运行时反射。
也许正确的名称应该是匿名接口。
也就是说,我接受通过反射的运行时解决方案也可能是一种解决方案。