繁体   English   中英

使用 class 的实例变量创建字符串

[英]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。

如果您无法在HashTableMap中移动 class 的不同属性,则可以使用反射来遍历 class 的属性属性

但是,如果您可以将属性移动到HashTableMap ,那么我们可以使用以下代码片段。 对不起,我不是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM