重载很好。但如果我们考虑到我们已经得到了 两个对象ObjectA和objectB。两者都得到了#34; id"和"名称"变量。我想写一个方法(在第三类),它返回给定对象的名称。编写重载函数使我重复代码。这是一个很好的做法吗? 改为使用泛型函数会不会更好?
所以,我知道我可以写一个重载函数,某事。那样:
public String getInfo(ObjectA o){
if(o.getId()!=1) return o.name;
return "";
}
public String getInfo(ObjectB o){
if(o.getId()!=1) return o.name;
return "";
}
它工作正常。 但两个功能都是一样的!唯一的区别是事实,他们需要一个不同类型的论点。因为它们看起来一样,是不是违反了DRY规则? 我尝试编写简单的泛型方法,但IDE将该.getId和that.name()标记为错误,并建议将其转换为((ObjectA)).getId()或((ObjectB)).getId() 。避免我在线路上做到了#34; T that = clazz.cast(o);? 我做错了什么?
public <T> String getInfo(Class<T> clazz, Object o) {
T that = clazz.cast(o);
if (that.getId()!=1) return that.name;
return "";
}
一般来说,我想知道,如果我的想法是可能的。我该如何解决我的错误?而且,这是一个好主意吗?或者简单地编写重载函数是否更好?
答案 0 :(得分:22)
这两个想法都很糟糕。您的ObjectA
和ObjectB
类应实现定义getId()
和getName()
方法的通用接口。
然后你可以用一种方法逃脱:
public String getInfo(Interface o){
if(o.getId()!=1) return o.getName();
return "";
}
答案 1 :(得分:18)
您的案例是编程接口的理想选择。创建一个界面并移动常用方法。
svn propset svn:ignore -F .svnignore .*\