【问题标题】:Jave Type Parameter Method and Constructor ProblemJava类型参数方法和构造函数问题
【发布时间】:2019-07-09 00:56:46
【问题描述】:

我有这些课程: - A 类是一个接口,只有一个带有类型参数的抽象方法“M1” - B 类实现 A - C类是抽象类 - D 类扩展 C 类

在 B 类上,我覆盖方法 M1 并尝试创建一个 C 对象,但它不起作用

public interface A{ 
    public abstract <R> void M1(int a, int b, R ress);
}
public class B implements A{ 
    public <B> void M1(int a, int b, B ress){
        D itsd = new D(int a, int b, ress);
    }
}
public abstract class C{ 
    int a, b;
    public C(int a, int b){
        this.a=a;
        this.b=b;
    }
}
public class D extends C{ 
    B c;
    public D(int a, int b, B c){
        super(a, b);
        this.c=c;
    }
}

我收到这个建议的错误:Change Constructor D(int a, int b, B c) to D(int a, int b, B c) idk 为什么,如果这个问题对你来说很明显,我很抱歉,但我所有这些类型化方法的新手

【问题讨论】:

  • B c 并不总是与 B ress 相同的类型。您可以尝试为c 变量参数化D 类或其构造函数。

标签: java function types parameters


【解决方案1】:
public class B implements A{ 
    public <B> void M1(int a, int b, B ress){
        D itsd = new D(int a, int b, ress);
                                     ^^^^of any reference type.

这里的类型参数B 隐藏了(我认为这是正确的术语)类Bress 可以是调用者指定的任何类型。

你的意思是:

    public <R> void M1(int a, int b, R ress){

稍后...

public class D extends C{ 
    B c;
    public D(int a, int b, B c){

这里B 是类B

我强烈建议避免使用单字母类名,否则会严重违反 Java 命名约定。

【讨论】:

  • 是的,“隐藏”或“隐藏”是术语。
  • @chrylis 隐藏和阴影不是略有不同吗?我可以在 JLS 中查找它,但我只会再次忘记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 2011-08-03
  • 1970-01-01
  • 2017-08-31
  • 2014-11-20
  • 2011-01-02
  • 1970-01-01
相关资源
最近更新 更多