当前位置: 首页 > 知识库问答 >
问题:

泛型类:引用类型特定的方法

璩华辉
2023-03-14

我有一个有界泛型类,我们称之为泛型,它的参数T扩展了抽象类abstract:

泛型类:

public class Generic<T extends Abstract> { 
   
   public <T extends Abstract> List<T> method() {
   
      Map<String,String> map = T.getMap(); //this is the line with the error. I'll explain it below

      //return statement and such
   }
}

抽象类


public abstract class Abstract {
   protected Map<String, String> map;

   public abstract Map<String, String> getMap();
}

泛型类中T引用的类

public class class1 extends Abstract {
   
   public class1() {
   //map is inmutably defined here and assigned to the super
   }

   @Override
   public Map<String, String> getMap() {
   return super.map;
   }
}

当尝试引用方法 getMap() 时,该方法来自 T 边界内的类(并且根据抽象类定义,T 的所有可能实例都将具有该方法),我收到以下错误:

不能从静态上下文引用非静态方法getMap()

然而,任何地方都没有静态关键字。我错过了什么??

谢谢!

共有1个答案

云星波
2023-03-14

因为方法getMap()是一个实例方法(即不是静态的),所以如果T调用该方法,则需要一个实例。

你的阶级结构看起来也很差。我认为你实际上想要的是:

public class Generic<T> extends Abstract<T> { 

}

public abstract class Abstract<T> {
    protected Map<String, T> map;
}

但是没有你的意图的背景,我不能确定。

 类似资料:
  • 我正在尝试有一个通量通用转换器使用通用类型在Java 8。我把我的代码建立在这个答案的基础上。其思想基本上是实现这个特定的转换器->: 类型转换器->转换为我想要的任何类型。因此,我正在使用构造函数创建一个类型为的类,并返回一个方法。我想在调用上创建类似这样的多个条目:,但类类型不同。但它甚至对整数也不起作用。 当我使用此单元测试进行测试时,我得到错误:。

  • 问题内容: 我有一个旧类,该类本身不是泛型,但其方法返回类型之一使用泛型: 使用泛型返回字符串的集合。因此,我可以进行遍历,而无需将元素强制转换为: 但是,如果我将自己更改为通用名称,但其他所有内容均保持不变: 然后继续使用对的非泛型引用,不再返回,而是返回非类型。因此,客户端代码无法编译: 为什么是这样?有哪些解决方法? 我的猜测是,通过使用对泛型类的非泛型引用,Java将关闭整个类的所有泛型。

  • 问题内容: Eclipse在正在运行的项目中仅使用以下代码(在其中仅包含伪类和main方法)给我警告(标题中): 最后一行触发警告。我不确定我在这里做错了什么,或者实际上我在做什么。我是一名Java学生,正在研究一个可疑的教程,并且试图理解泛型。假设变量x不能说明类型安全性。我尝试将其强制转换为对象类型(我认为它没有任何作用,因为它已经存在了),并且不起作用。 我如何解决此警告? 问题答案: 您声

  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符

  • 如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个

  • 在研究泛型时,我注意到泛型方法和泛型类型(类或接口)在类型引入语法上的一个差异使我感到困惑。 泛型方法的语法为 文件上说 为了彼此保持一致,我希望方法语法为 ,或者类型语法(for class)为,但事实显然并非如此。 为什么一个要介绍在前,另一个要介绍在后? 我主要以的形式使用泛型,并认为可能看起来很奇怪,但这是一个主观的参数,此外对于方法也是这样。您可以调用,类似于 在寻找技术解释时,我想在指