gpt4 book ai didi

java - 带有 getter 的公共(public)静态最终变量

转载 作者:行者123 更新时间:2023-11-30 06:15:43 25 4
gpt4 key购买 nike

在工作中,我们对代码进行同行评审,我发现了一些我不喜欢的东西,我想询问有关此特定问题的最佳实践。

我们有一个接口(interface):

public interface Item {
public String getType();
//some other methods
}

和一个实现类:

public class EmailItem implements Item {  
public static final String TYPE = "email";

@Override
public String getType() {
return TYPE;
}
}

和一些使用这些类的代码:

for (Item item : items) {
if (EmailItem.TYPE.equals(item.getType())) {
isProcessed = Processor.process(item);
} else {
LOGGER.error("Unknown failover type received to process. Type: {}", item.getType());
}
}

此时我们只有一个实现类,因此不需要检查类型,但我们将添加一些其他实现,然后它才有意义(尽管将使用 switch)。

主要问题是 EmailItem 将变量 TYPE 设置为 public,并且此变量也有一个 getter。

该类的类和实例都应该可以访问这个变量,但是拥有它 public static final 并直接用实例访问它似乎不正确/最佳实践(尽管在技术上是可行的) 并且当它是私有(private)的(它应该是私有(private)的)时,其他类将无法访问它(其中 for cycle 是静态的,此时 static 没有意义)。

通过讨论,我们提出了使用 instanceOf(...)instance.getClass().getName()EmailItem.class 的解决方案.getName() 但我觉得它们都不优雅 :).

最后,我的问题是,对于所描述的问题,最优雅的解决方案是什么?

嘿,这是我的第一个问题,我希望它对你有意义 ;)。

最佳答案

从面向对象的角度考虑,我会考虑以下方法:

public interface Item {
public boolean process();
//some other methods
}

public class EmailItem implements Item {
@Override
public boolean process() {
// email specific implementation
}
}

public class AnotherItem implements Item {
@Override
public boolean process() {
// another implementation
}
}

for (Item item : items) {
isProcessed = item.process();
}

关于java - 带有 getter 的公共(public)静态最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364691/

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