在Java泛型函数中访问具体属性
我不熟悉Java泛型。我编写了一个函数,如下所示:
public class C<T extends MyClass> implements MyInterface<T>{
public void f(T obj){
...
obj.getName()
}
}
上面的函数f
是为两种类型的对象MySubClass1
和MySubClass2
调用的MySubClass1
和MySubClass2
是从抽象类MyClass
继承的两个具体类,name
是MySubClass2
的一个属性
当用对象MySubClass2
调用f时,我希望访问上面的名称。我不知道该怎么做
# 1 楼答案
在将
T
约束为MyClass
的通用方法中,只有MyClass
的方法可用。由于getName
只在MySubClass2
中实现,因此在没有对MySubClass2
进行强制转换的情况下,您无法访问getName
,这与使f()
方法具有通用性的目的背道而驰您可以传递一个
Function
对象,该对象将name
从T
拉到f()
,如下所示:调用者调用
f()
的方式如下:请注意,这种技术允许您在
MySubClass1
对象上调用f
,只要您提供一些获得名称的方法:# 2 楼答案
那么你的方法就不能依赖它的存在,因为
obj
可以是MyClass
派生的任何东西这意味着您的设计应该改变,要么使用单独的方法,要么将名称移动到
MyClass
你可以通过
instanceof
检查和演员阵容来做到:。。。但是十有八九,使用
instanceof
会让你后退一步,重新考虑你的设计