gpt4 book ai didi

java - 是否可以在接口(interface)类中访问泛型类型的方法?

转载 作者:行者123 更新时间:2023-11-30 07:45:35 25 4
gpt4 key购买 nike

我想通过实现一个接口(interface)类来向类添加一个新方法,但不需要每次都重写它。我知道这听起来很荒谬,但请考虑以下示例:

public class Main {

public static void main(String... args) {
Subclass subclass = new Subclass();
subclass.println("Hello");
subclass.print("World!");
}

static abstract class Abstract {
abstract void print(String message);
}

/**
* I would like to add methods from this class to
* whatever class that is a subclass of Abstract.
*/
interface Interface<T extends Abstract> {
default void println(String message) {
System.out.println(message);
}
}

static class Subclass extends Abstract implements Interface<Subclass> {
@Override
public void print(String message) {
System.out.print(message);
}
}

}

基本上,我想将 Interface 中的方法 println 添加到任何扩展类 Abstract 的类。这样,我们就知道 T 是什么类型了。但我真正想在 println 中做的是从继承自类 AbstractT 调用一个方法。像这样的东西:

interface Interface<T extends Abstract> {
default void println(String message) {
// I know that this WON'T work
((Abstract) T).print(message + "\n");
}
}

我这样做的原因是,使这些方法在不需要被覆盖的意义上可以重用(并保存重复的代码行)。我知道这很荒谬,因为它实际上听起来像是抽象类的字面用法,唯一的区别是,我们不能从多个类扩展。无论如何,这只是我的结论。

那么,这可能吗? 或者可以用完全不同的方式而不是使用界面来完成吗?有什么想法吗?

最佳答案

如果您希望接口(interface) Interface 中的方法假定它是在扩展 Abstract 的类型上并调用 Abstract 方法,这应该工作:

interface Interface {
default void println(String message) {
((Abstract) this).print(message + "\n");
}
}

假设您只在扩展 Abstract 的类上实现接口(interface)。如果您尝试从未扩展 Abstract 的对象调用 println(),您将得到一个转换异常。

关于java - 是否可以在接口(interface)类中访问泛型类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51679170/

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