gpt4 book ai didi

java - 通过类字段、重写的类方法或属性传递参数

转载 作者:行者123 更新时间:2023-11-30 02:56:24 24 4
gpt4 key购买 nike

我最近想知道,将参数传递给该方法的三种方法(如下所示)中的哪一种最适合您、您的 CPU、内存以及为什么。我正在考虑允许我将来传递更多参数而不更改方法签名的方法。

如果您知道更好的东西,我会在这里倾听和学习。

通过方法传递

Params.java

public interface Params {
int getParamOne();
int getParamTwo();
}

调用

obj.foo(new Params() {

@Override
public int getParamOne() {
return 1;
}

@Override
public int getParamOne() {
return 2;
}
});

接收

public void foo(Params p) {
int p1 = p.getParamOne();
int p2 = p.getParamTwo();
}
<小时/>

按类字段传递

Params.java

public class Params {
private int paramOne;
private int paramTwo;

// Getters and setters here
}

调用和接收

这里没有魔法,只需创建一个新的 Params 对象,使用 setter,将其传递给方法并使用 getter。

<小时/>

通过属性类传递

调用

properties.put("paramOne", 1);
properties.put("paramTwo", 2);
obj.foo(properties);

接收

public void foo(Properties properties) {
int a = (int) properties.get("paramOne");
int b = (int) properties.get("paramTwo");
}
<小时/>

我很高兴展示一个现实生活中的代码示例,它实际上需要传递不同类型和数量的属性。我正在使用第三种方法 - 传递属性:

public interface DataProvider {
public String getContent(Properties properties);
}

public class HttpProvider implements DataProvider {
@Override
public String getContent(Properties properties) {
InputStream in = new URL(properties.get("URL")).openStream();
String content = IOUtils.toString(in);
IOUtils.closeQuietly(in);
return content;
}

public class FtpProvider implements DataProvider {
@Override
public String getContent(Properties properties) {
FTPClient ftpClient = new FTPClient();
ftpClient.connect(properties.get("server"), properties.get("port"));
ftpClient.login(properties.get("user"), properties.get("pass"));
// Get file stream and save the content to a variable here
return content;
}
}

用于获取文件的不同方法的一个接口(interface)。我并不坚持认为这是否好,这只是我在当前工作项目中偶然发现的代码示例,我想知道是否可以做得更好。

最佳答案

在性能方面,“Params”类的使用比属性更好。 java编译器可以很好地处理这种短命的类。

  • 人们会看到某些构造函数/工厂方法的属性,例如 XML 等。
  • 在较大的系统中,人们会看到包含类的参数,以将 API 限制为一个参数,而不是使用重载方法。

我会这样做:

public class Params {
public final int a;
public final int b;

public Params(int a, int b) {
this.a = a;
this.b = b;
}
}

并在类中立即使用params.a

对于其余的,还有构建器模式,但这更多地是复杂构造函数的替代品。

关于java - 通过类字段、重写的类方法或属性传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139545/

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