[英]Create a string using the instance variable of a class
我有一个 class 供您为 URL 指定所有可能的参数,但您不必这样做。
给出例如以下 class:
class Foo {
private String a;
private String b;
private String c;
}
现在可能并非所有参数都为 class 的实例设置,因此有些参数是 null。 到这里没问题。 现在我想从这个 class 创建一个字符串,它只包含所有非空参数。
例如:
Foo foo = new Foo();
foo.setA("a");
foo.setC("c");
你可以用 if else 查询来做,但它对我来说似乎不合适。 它有一些不好的风格。
如果有很多参数并且我必须在添加或删除参数时永久调整代码。 有谁知道如何以不同的方式解决它。
提前谢谢了。
编辑
抱歉,目前的结构如下所示:
interface Request {
String getUrl();
}
class A implements Request {
...
public String getUrl() {
...
}
}
class B implements Request {
...
public String getUrl() {
...
}
}
...
在这个例子中,可能有几个实现接口的类。 其中每个 class 具有不同的属性。 有些必须在场,有些则不然。 并且getUrl()方法根据参数返回class参数的url,不是null。
如果您无法在HashTable
或Map
中移动 class 的不同属性,则可以使用反射来遍历 class 的属性属性。
但是,如果您可以将属性移动到HashTable
或Map
,那么我们可以使用以下代码片段。 对不起,我不是 Java 的家伙,但我已经通过 C# 做了示例,并写了评论如何通过 Java 实现它。
如果getUrl
有不同的实现,那么我们可以像这样在每个 class 中定义实现:
interface IFooRequest
{
string getUrl();
Dictionary<string, string> GetParameters();
}
及其具体实现:
class A : IFooRequest // "implements" in Java
{
public Dictionary<string, string> GetParameters()
{
return new Dictionary<string, string>
{
{ "a", "foo"}
};
}
public string getUrl()
{
throw new NotImplementedException();
}
}
class B : IFooRequest // "implements" in Java
{
public Dictionary<string, string> GetParameters()
{
return new Dictionary<string, string>
{
{ "b", "bar"}
};
}
public string getUrl()
{
throw new NotImplementedException();
}
}
如果getUrl
具有相同的实现,那么我们可以定义抽象 class 并重用它的行为:
public abstract class FooRequest
{
public string GetUrl() { return ""; }
public abstract Dictionary<string, string> GetParameters();
}
class A : FooRequest // "extends" in Java
{
public override Dictionary<string, string> GetParameters()
{
return new Dictionary<string, string>
{
{ "a", "foo"}
};
}
}
class B : FooRequest // "extends" in Java
{
public override Dictionary<string, string> GetParameters()
{
return new Dictionary<string, string>
{
{ "a", "foo"}
};
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.