gpt4 book ai didi

java - Java 8 接口(interface)默认方法中使用的阴影变量

转载 作者:搜寻专家 更新时间:2023-11-01 03:01:20 25 4
gpt4 key购买 nike

今天我在想一个很好的方法来为不同对象所需的通用功能编写更少的代码。

继承可以完成这项工作,但是类将无法从其他任何人继承,所以我选择了接口(interface)。

所以我的界面具有某些对象所需的功能:

public interface Test {
String message = "Hello from Interface!";

default void printMessage() {
System.out.println(message);
}
}

然后我可以在任何对象中使用它而无需覆盖/编写任何代码,而不仅仅是在需要时简单地调用该方法:

public class TestingTest implements Test {

public String message = "Hello from Class!";

public TestingTest() {
printMessage();
}

public static void main(String[] args) {
new TestingTest();
}
}

它就像一个魅力!但是......然后我想,如果我希望其中一些对象在不需要(可选)的情况下指定不同的消息怎么办,我首先想到的是隐藏接口(interface)变量,但它不起作用,默认方法继续使用接口(interface)中的变量而不是类变量(隐藏它)。

解决方案当然是在接口(interface)中重载 printMessage 方法,以便在用户需要指定消息时将消息作为参数接收,但是有没有更优雅的方法?就像只是在类里面宣布一条新消息?

最佳答案

界面中的String messagestatic (AFAIK)。所以这个方案是行不通的。

你可能会做一些(丑陋的)事情:

default void printMessage(String... messages) {
if (messages.length == 0) {
messages = new String[] { "arrgg" };
}
System.out.println(messages[0]);
}

字段没有继承,所以值只能来自可覆盖的方法,比如

public String message() { return "..."; }

关于java - Java 8 接口(interface)默认方法中使用的阴影变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33501964/

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