首先,我完全为标题道歉,我不知道该怎么做,这是一个令人困惑的概念,无法在标题中解释,所以请耐心等待。
public class fido
{
public void foo(process proc)
{
if (/* comparing by time */)
{
if (proc[parent].time < proc[child].time)
{
//do something
}
}
else if (/* comparing by priority */)
{
if (proc[parent].priority < proc[child].priority)
{
//do something
}
}
}
}
我该如何缩短这个?我希望它可以像通过foo()参数使用“已定义”成员一样简单。
例如
public class fido
{
public void foo(process proc, something mem)
{
if (/* comparing by time */)
{
if (proc[parent].mem < proc[child].mem)
{
//do something
}
}
}
}
然后我会使用像
这样的东西foo(processA, time); // If I want to use time member
foo(processB, priority); // Or if I want to use priority member
我知道以前的代码是100%不正确的,但我希望你能理解我的目标。
我只是想缩短代码,因为我所拥有的是一个优先级队列类,它使用堆和所有内容来优先处理值,但是我需要将该类用于多种类型的值,例如时间和优先级。我绝对不想创建一个重复的类(完全没有益处),我正在寻找一种可以缩短它的方法。有人知道最好的方法吗?
答案 0 :(得分:1)
您可以在方法中传递enum
作为参数。
public class Fido
{
public void foo(Process proc, Options options)
{
if (options == Options.Time)
{
//Do time work
}
else if (options == Options.Priority)
{
//Do priority work
}
}
}
public enum Options
{
Time,
Priority
}
请注意,传递bool
而不是enum
也适用于此。它只是让事情变得不那么容易了。