gpt4 book ai didi

Java - 类公共(public) API 的界限

转载 作者:行者123 更新时间:2023-12-01 20:57:25 28 4
gpt4 key购买 nike

我有一个 ModelDecorator 助手。我希望它具有以下公共(public) API

class ModelDecorator<T>{
public static <T> ModelDecorator<T> create(Class<T> clazz);
public <SUPER> T from(SUPER fromInstance);
}

因此,给定类 A,B 扩展 A,可以这样使用:

A a = new A();
B b = ModelDecorator.create(B.class).from(a);

但我希望对 T 和 SUPER 进行限制,因此我确保只有子类可以使用 API 进行实例化。此时此刻,我能做的就是:

C c = new C();
B b = ModelDecorator.create(B.class).from(c);

其中 B 不继承自 C。

有什么想法吗?谢谢

最佳答案

我认为限制类型参数 T 扩展类型参数 S 的唯一方法是将这些定义放入类定义中:

public class ModelDecorator<S, T extends S> {
public static <S, T extends S> ModelDecorator<S, T> create(Class<T> clazz) { ... }
public T from(S instance) { ... }
}

有了这些类

class A {}
class B extends A {}
class C {}

您现在可以编写以下代码:

A a = new A();
B b1 = ModelDecorator.<A, B> create(B.class).from(a); // compiles fine

C c = new C();
B b2 = ModelDecorator.<C, B> create(B.class).from(c); // bound mismatch here

第二个 B 创建现在出现编译器错误。

不幸的是,您现在必须显式提供类型参数,因为编译器无法从简单的方法调用 create(B .class).

关于Java - 类公共(public) API 的界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42084000/

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