gpt4 book ai didi

java - 使用泛型方法替代重载?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:03:07 25 4
gpt4 key购买 nike

重载没问题。但是如果我们认为我们有两个对象 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 "";
}

一般来说,我想知道我的想法是否可行。我该如何解决我的错误?更重要的是,这是个好主意吗?还是简单地编写重载函数更好?

最佳答案

这两种想法都不好。您的 ObjectAObjectB 类应该实现定义 getId()getName() 方法的通用接口(interface)。

然后你可以用一个方法逃脱:

public String getInfo(Interface o){
if(o.getId()!=1) return o.getName();
return "";
}

关于java - 使用泛型方法替代重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32139926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com