Java 强制不可变接口实现功能接口

Java 强制不可变接口实现功能接口,java,immutables-library,Java,Immutables Library,我正在使用Java不可变库 我有3个不可变的类,所以基本上3个类有一堆参数。 对于这些类中的每一个,我们都有一个唯一的键 因此,我决定定义这样一个接口: public interface DataKey<T> { public T getKey(); } 公共接口数据密钥{ 公共T getKey(); } 现在,我想让每个不可变类实现这个接口,下面是一个例子 @Value.Immutable public abstract class CurrencyDemo imple

我正在使用Java不可变库 我有3个不可变的类,所以基本上3个类有一堆参数。 对于这些类中的每一个,我们都有一个唯一的键

因此,我决定定义这样一个接口:

public interface DataKey<T> {
    public T getKey();
}
公共接口数据密钥{
公共T getKey();
}
现在,我想让每个不可变类实现这个接口,下面是一个例子

@Value.Immutable
public abstract class CurrencyDemo implements DataKey<String> {
    public abstract String getCode();

    @Value.Derived
    public String getKey() {
        return getCode();
    }

}
@Value.Immutable
公共抽象类CurrencyDemo实现了DataKey{
公共抽象字符串getCode();
@派生值
公共字符串getKey(){
返回getCode();
}
}
这一切都很好。我之所以能够做到这一点,是因为我知道应该为getKey提供一个实现,否则在构建不可变java对象时会出现异常

当开发人员定义一个实现DataKey接口的不可变类时,有没有办法强迫用户提供getKey()的实现


目的;我可以在这些不可变的类上编写公共代码,并保证它们都有一个名为getKey()的方法。

当开发人员定义一个实现DataKey的类时,无论该类是否是不可变的,他们都有义务提供一个
getKey()
(或将其类标记为抽象类)-这就是实现接口的工作原理,所以我不确定您在问什么。也许我只是解释了一个错误的问题(?)抽象类(这里的CurrencyDemo)不会强制开发人员从接口(DataKey)实现一个方法。如果要强制开发人员在CurrencyDemo中提供getKey()的实现,请从CurrencyDemo中删除抽象关键字。无论如何,在这种情况下,我们不能创建CurrencyDemo的对象,因为它是抽象的,任何子类(也不是抽象的)都应该提供所述方法的实现,否则编译器会抱怨。希望这有帮助!根据定义,不可变类定义为抽象类。Immutable library生成此类的实现。由Immutable生成的实现将具有getKey()的实现。但这对我不起作用。我希望用户提供一个getKey()的自定义实现,就像我提到的示例中一样,当开发人员定义一个实现DataKey的类时,无论该类是否是不可变的,他们都有义务提供一个
getKey()
的实现(或者将他们的类标记为抽象类)-这就是实现接口的工作原理,所以我不确定您在问什么。也许我只是解释了一个错误的问题(?)抽象类(这里的CurrencyDemo)不会强制开发人员从接口(DataKey)实现一个方法。如果要强制开发人员在CurrencyDemo中提供getKey()的实现,请从CurrencyDemo中删除抽象关键字。无论如何,在这种情况下,我们不能创建CurrencyDemo的对象,因为它是抽象的,任何子类(也不是抽象的)都应该提供所述方法的实现,否则编译器会抱怨。希望这有帮助!根据定义,不可变类定义为抽象类。Immutable library生成此类的实现。由Immutable生成的实现将具有getKey()的实现。但这对我不起作用。我希望用户提供一个getKey()的自定义实现,如我提到的示例中所示