Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调用引用泛型类型的接口字段?_Java_Generics_Interface - Fatal编程技术网

Java 如何调用引用泛型类型的接口字段?

Java 如何调用引用泛型类型的接口字段?,java,generics,interface,Java,Generics,Interface,情况就是这样 我具有与字段的接口: public interface SpecificAction extends Action{ String CONSTANT_FIELD = "Specific field"; } 然后我有一个参数化的类,里面有我想调用SpecificAction接口字段的方法: public class Test<A extends Action>{ void someMethod(){ System

情况就是这样

我具有与字段的接口:

public interface SpecificAction extends Action{

    String CONSTANT_FIELD = "Specific field";

}
然后我有一个参数化的类,里面有我想调用SpecificAction接口字段的方法:

public class Test<A extends Action>{

    void someMethod(){
        System.out.println(A.CONSTANT_FIELD); // there would be the "cannot resolve symbol 
                                              // CONSTANT_FIELD" message
    }

}
公共类测试{
void方法(){
System.out.println(A.CONSTANT_字段);//将出现“无法解析”符号
//“常量字段”消息
}
}
有什么方法可以调用引用泛型类型而不是接口的接口字段吗?

接口定义“Is-a”关系类型。它们声明应该实现的方法,但不声明字段或任何方法体

您需要做的是将SpecificAction转换为一个
抽象类,该类可能有默认实现的方法和声明的抽象方法(未实现)

编辑:解决方案(?)

类测试{
私人最终诉讼;
公开测试(一项行动){
这个动作=某个动作;
}
void方法(){
System.out.println(action.getConstantField());
}
}
特定于类的动作扩展了动作{
公共特定操作(字符串常量字段){
超级(康斯坦特菲尔德);
}
//从父类操作继承的getConstantField
}
//声明这个类抽象意味着不能直接实例化它
抽象集体诉讼{
私有字符串constantField=“未知”;
公共行动(字符串康斯坦特菲尔德){
this.constantField=constantField;
}
公共字符串getConstantField(){
返回康斯坦特菲尔德;
}
公共void setConstantField(字符串值){
this.constantField=值;
}
}
如果你从某个地方打电话给它

publicstaticvoidmain(字符串[]args){
新测试(新的特定操作(“特定操作”)).someMethod();
}
输出为:

具体操作
进程已完成,退出代码为0

i、 e无论您将值设置为什么。您可以在SpecificAction(传递给超级/父构造函数的静态最终变量)中将其重构为常量。

您需要从接口SpecificAction而不是Action扩展类。接口操作不包含您的字段

接口特定操作扩展操作{
字符串常量\u FIELD=“特定字段”;
}
类测试{
void方法(){
System.out.println(A.CONSTANT_字段);//很好
}
}

我相信你做不到。但是,您可以使方法
成为getConstantField()事实上
扩展动作
当然并不意味着
扩展特定动作
(其中定义了
常量字段
)我在另一个库中有SpecificAction接口,无权编辑it@Konstantin像
公共类测试
这样的声明是否适用于您?现在请检查上面的编辑。。这就是你要找的吗?即使这是有效的,也是骗人的。我很确定
A.CONSTANT\u FIELD
将始终解析为
特定操作。CONSTANT\u FIELD
而不是
A
自己的静态字段,因为泛型有时是不可靠的。