我有两个完全相同的函数和一个不同的函数,它们将TypeX作为参数。所有TypeX都具有相同的父类Type。虚拟代码如下:
atexit.register(greet_me, text1, name='peter', age= 32, gender = 'male')
我想知道有没有一种优化这些功能的好方法?我的代码需要根据类类型选择正确的函数,所以我不能在这里使用父类或泛型类型,因为这会影响TypeC的参与。
最好的事情是public void Append(TypeA item) { //same code }
public void Append(TypeB item) { //same code }
public void Append(TypeC item) { //different code }
,但当然没有这样的东西可用。有什么想法吗?
感谢您的帮助!
答案 0 :(得分:2)
虽然@ erwin-bolwidt提供的解决方案可行,但我建议你也考虑一下
select *
from table_name
where EMPLOYEE_ID = 'C000850'
and TA_FROM_DATE = cast('02/21/2018' as date)
这种方法将允许更松散的耦合以及未来专门的记录和扩展的潜力
答案 1 :(得分:1)
在编译时根据对象的声明类型(不是实际类型)选择要调用的方法。将TypeA和TypeB的Append合并到一个采用import * as axios from 'axios';
axios.defaults.withCredentials = true;
export function getAll() {
const url = 'https://example.com';
return axios.get(url);
}
参数的方法中是安全的 - 它与当前代码没有区别。
但是如果要选择实际类型,则需要使用Type item
。或者您在类型上创建一个方法,在instanceof
方法中返回您需要的任何内容。
append
或更清洁,如果唯一的区别在于你从物品中得到的东西:
public void append(Type item) {
if (item instanceof TypeC) {
// Do TypeC-specific stuff
} else {
// Do stuff for TypeA, TypeB, and any other subtype of Type
}
}
答案 2 :(得分:1)
您可以为TypeA
和TypeB
创建父类。然后使用此类型作为重载函数的参数。
这样可以避免重复代码。
另一种方法是让这些类实现一些接口,然后使用这个接口作为重载函数的参数。
第三,您可以使用泛型类型和委托实现到相应的函数。
答案 3 :(得分:0)
在java中很简单,你可以使用方法重载
来完成它public class example{
public static void print(String s) {
System.out.println("string - "+s);
}
public static void print(int q) {
System.out.println("number - "+q);
}
public static void main(String[] args) {
print(12);
print("welcome");
}
}
输出
number - 12
string - welcome