java泛型传递疑问

六只 发布于 2012/04/06 12:10
阅读 774
收藏 0

public class BaseView<T extends BaseDomain> implements Serializable

public abstract class AbstractEntityView<T extends EntityDomain> extends
		BaseView<EntityDomain>

public class UserView extends AbstractEntityView<User>

我这样实现了View的泛型类继承关系,目的是在UserView中可是直接使用User,比如User类中有getUserName()方法,可以直接调用。可是现在的情况是User的方法我没办法用。只能强转成User类型然后再使用。

求解。

加载中
0
Grrrr
Grrrr
public class User extends EntityDomain{
 private String userName;
 public void setUserName(String userName) {
  this.userName = userName;
 }
 public String getUserName() {
  return userName;
 }
}
public class AbstractEntityView<T extends EntityDomain> extends BaseView<EntityDomain> {

	private static final long serialVersionUID = 1L;
	protected T t;
}

public class UserView extends AbstractEntityView<User>{

	private static final long serialVersionUID = 1L;

	public static void main(String args[])
	{
		UserView v = new UserView();
		v.t.getUserName();
	}
}

看下是不是你想要的.

六只
六只
嗯,是我想要的,我发现了你的实现和我的之间的一个区别,就是我在BaseView中放了一个protected的BaseDomain,在AbstractEntityView中没有放EntityDomain作为成员变量。然后放一个进入之后就可以了。我想知道为什么。。。有点儿没想明白。
0
Grrrr
Grrrr
代码太少. 搞不清楚关系. 能不能把具体代码粘出来.
六只
六只
下面是结构图,目的就是想在UserView不用强制转换类型就可以直接使用User类的方法。
0
Grrrr
Grrrr

在BaseView里面放BaseDomain是没用的. 只能看到BaseDomain的方法.

看不到User的. 你就记住一点就可以. User在哪里被泛型的. 就在那里面添加 T的instance.

所以应该在AbstractEntityView里添加.

Grrrr
Grrrr
哈哈`` 明白就好, 有时间看看泛型的官方文档. 多了解下,你现在还停留在类泛型的层面上, 其实大多时候都用方法泛型.因为更加灵活! 对类的污染更加小. 还有 "?" 之类的.
六只
六只
晓得了,细节决定成败啊。我搞了好久都没搞明白。。。
0
Grrrr
Grrrr
看在我手写代码的份上  给点分吧
Grrrr
Grrrr
@六只 : 谢谢!
Grrrr
Grrrr
谢谢~!
六只
六只
怎么给分?设为最佳答案可以给你分吗?
返回顶部
顶部