作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
重载没问题。但是如果我们认为我们有两个对象 ObjectA 和 objectB。两者都有“id”和“name”变量。我想编写一个方法(在第三类中),它返回给定对象的名称。编写重载函数让我重复代码。这是一个很好的做法吗?改用泛型函数不是更好吗?
所以,我知道我可以写一个重载函数,某事。像那样:
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 将 that.getId 和 that.name() 标记为错误并建议将其转换为 ((ObjectA) that).getId() 或 ((ObjectB) that).getId() .我不是在“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 "";
}
一般来说,我想知道我的想法是否可行。我该如何解决我的错误?更重要的是,这是个好主意吗?还是简单地编写重载函数更好?
最佳答案
这两种想法都不好。您的 ObjectA
和 ObjectB
类应该实现定义 getId()
和 getName()
方法的通用接口(interface)。
然后你可以用一个方法逃脱:
public String getInfo(Interface o){
if(o.getId()!=1) return o.getName();
return "";
}
关于java - 使用泛型方法替代重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32139926/
我是一名优秀的程序员,十分优秀!