Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 - Fatal编程技术网

Java 通用接口问题

Java 通用接口问题,java,generics,Java,Generics,我面临一个通用实现的问题。代码如下: public interface Response<S, T> { public void response(S data, T... arg); } public class CustomerDetail<XYZ, PQR> implements Response<XYZ, PQR> { @Override public void response(XYZ data, PQR... args) {

我面临一个通用实现的问题。代码如下:

public interface Response<S, T> {

 public void response(S data, T... arg);
}

public class CustomerDetail<XYZ, PQR> implements Response<XYZ, PQR> {
  @Override
  public void response(XYZ data, PQR... args) {
    PQR request = args[0];
    Map reportMap = data.any();
    //do something
  }
}


public class EmployeeDetail<ABC, DEF> implements Response<ABC, DEF> {
  @Override
  public void response(ABC data, DEF... args) {
     List reportList = data.getDetails();
    //do something
  }
}
在编译过程中,我得到编译错误:

cannot find method any();
cannot find the method getDetails();
早些时候,我尝试使用此代码,但效果很好:

public class CustomerDetail<S, T> implements Response<S, T> {
  @Override
  public void response(S data, T... args) {
    PQR request = (PQR)args[0];
    Map reportMap = ((XYZ)data).any();
    //do something
  }
}


public class EmployeeDetail<S, T> implements Response<S, T> {
  @Override
  public void response(S data, T... args) {
     List reportList = ((ABC)data).getDetails();
    //do something
  }
}
公共类CustomerDetail实现响应{
@凌驾
公共无效响应(S数据、T…参数){
PQR请求=(PQR)参数[0];
Map reportMap=((XYZ)数据).any();
//做点什么
}
}
公共类EmployeeDetail实现响应{
@凌驾
公共无效响应(S数据、T…参数){
List reportList=((ABC)数据).getDetails();
//做点什么
}
}
但是我不想要泛型变量的类型转换。因此,我采用了上述方法。我试着按照任何想法去做,在哪里我犯了错误。感谢更改:

public class CustomerDetail<XYZ, PQR> implements Response<XYZ, PQR>
公共类CustomerDetail实现响应
致:

公共类CustomerDetail实现响应
和变化:

public class EmployeeDetail<ABC, DEF> implements Response<ABC, DEF>
公共类EmployeeDetail实现响应
致:

公共类EmployeeDetail实现响应
更改:

public class CustomerDetail<XYZ, PQR> implements Response<XYZ, PQR>
公共类CustomerDetail实现响应
致:

公共类CustomerDetail实现响应
和变化:

public class EmployeeDetail<ABC, DEF> implements Response<ABC, DEF>
公共类EmployeeDetail实现响应
致:

公共类EmployeeDetail实现响应

实现接口的类不是泛型类。因此,您不应提供以下参数:

public class EmployeeDetail<ABC, DEF> implements Response<ABC, DEF> {

这表示
EmployeeDetail
填充
响应
接口的参数。

实现接口的类不是泛型类。因此,您不应提供以下参数:

public class EmployeeDetail<ABC, DEF> implements Response<ABC, DEF> {

这表示
EmployeeDetail
填充
响应
界面的参数。

您已接近,但正在使用泛型类型隐藏类

此声明(删除多余的
public
):

只需重新定义泛型类型变量
S->XYZ
T->ABC
。这里没有指定具体的类型,只定义了与类同名的泛型类型变量

如果希望
扩展特定的泛型类型,则该类不应具有类型定义:

public class CustomerDetail implements Response<XYZ, PQR> {
  @Override
  public void response(XYZ data, PQR... args) {
    PQR request = args[0];
    Map reportMap = data.any();
    //do something
  }
}
公共类CustomerDetail实现响应{
@凌驾
公共无效响应(XYZ数据、PQR…参数){
PQR请求=参数[0];
Map reportMap=data.any();
//做点什么
}
}

作为补充说明,当您使用泛型时,您应该知道
List
的定义是
List
,而
Map
的定义是
Map
——它们也是泛型的。不要使用rawtypes。

您很接近,但您正在使用泛型类型隐藏类

此声明(删除多余的
public
):

只需重新定义泛型类型变量
S->XYZ
T->ABC
。这里没有指定具体的类型,只定义了与类同名的泛型类型变量

如果希望
扩展特定的泛型类型,则该类不应具有类型定义:

public class CustomerDetail implements Response<XYZ, PQR> {
  @Override
  public void response(XYZ data, PQR... args) {
    PQR request = args[0];
    Map reportMap = data.any();
    //do something
  }
}
公共类CustomerDetail实现响应{
@凌驾
公共无效响应(XYZ数据、PQR…参数){
PQR请求=参数[0];
Map reportMap=data.any();
//做点什么
}
}

作为补充说明,当您使用泛型时,您应该知道
List
的定义是
List
,而
Map
的定义是
Map
——它们也是泛型的。不要使用rawtypes。

编译错误发生在哪一行代码上?内部
EmployeeDetail
CustomerDetail
可能重复,
XYZ
DEF
不表示类,它们表示类型参数。这就是为什么给不同的东西起相同的名字是个坏主意。你在这个网站上问了4个问题,但没有接受任何答案。请阅读并考虑接受您的问题的答案。哪一行代码是编译错误?内部可能的副本>代码>雇员详细信息< /代码>和<代码>客户详细信息< /代码>,代码> XYZ 和<代码> DEF不代表类,它们是类型参数。这就是为什么给不同的东西起相同的名字是个坏主意。你在这个网站上问了4个问题,但没有接受任何答案。请阅读并考虑接受你的问题的答案。
public class CustomerDetail<XYZ, PQR> implements Response<XYZ, PQR> {
  @Override
  public void response(XYZ data, PQR... args) {
    PQR request = args[0];
    Map reportMap = data.any();
    //do something
  }
}
public class CustomerDetail implements Response<XYZ, PQR> {
  @Override
  public void response(XYZ data, PQR... args) {
    PQR request = args[0];
    Map reportMap = data.any();
    //do something
  }
}