运行Demo类将在SomeClass中调用静态方法newInstance来调用构造函数并打印问候
定义方法将包括返回类型+方法名称以及参数
newInstance的返回类型是
SomeClass
为什么在SomeClass
前面需要 ?看来,如果我不包含它,将会出现一个常见错误,称为“无法对非静态类型T进行静态引用”
要指出的另一件事是,我可以在
public class SomeClass<T> {
public static <T>SomeClass<T> newInstance(Class<T> clazz){
return new SomeClass<T>(clazz);
}
private SomeClass(Class<T> clazz){
System.out.println("hello");
}
}
public class Demo {
public static void main(String args[])
{
SomeClass<String> instance = SomeClass.newInstance(String.class);
}
}
什么是静态方法?一种适用于该类而不是特定实例的Method。T
类签名中的泛型参数public class SomeClass<T>
仅可用于特定实例(因此non-static type T
)。例如SomeClass<String>
在哪里[T = String]
。
通过<T>
在方法中包括的签名public static <T>SomeClass<T> newInstance(Class<T> clazz)
。你是在说 对于此方法,有一个通用类型实参T
。这与类签名中的T
分开T
。因此也可能是C
ie public static <C> SomeClass<C> newInstance(Class<C> clazz)
。或完全不同的东西。
但是,如果您不包含<T>
该方法,则编译器会认为您正在尝试T
在类签名中使用。这是非法的。
问题内容: 反正这周围吗?为什么从AB引用T时T被视为静态的? 问题答案: 接口的所有成员字段默认,和。 由于内部接口是默认设置,因此您不能从静态字段或方法中进行引用。 因为实际上是与类的实例相关联,所以如果它与与类相关联的静态字段或方法相关联,那么它将毫无意义。
问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: 为什么我会得到“无法从静态上下文引用的非静态变量”? 这是代码 错误说: 非静态类 Node 不能从静态上下文中引用 为什么不应该在main()方法中引用Node类? 问题答案: Java中的非静态嵌套类包含对父类 实例 的隐式引用。因此,要实例化a ,您还需要具有一个实例。在静态上下文(主要方法)中,没有要引用的实例。因此,编
问题内容: 在UNI atm上做Java课程,我遇到了骰子问题。 我有以下内容: 编译时,我得到:无法从静态上下文引用非静态变量n。我如何解决这个问题,同时让它从用户给定的值中随机化? 问题答案: 不是静态变量,因此您不能以静态方式()引用它。 由于它是类中的实例变量,并且您正在类中引用它,因此可以使用代替。
问题内容: 没有静态成员可以使用类型参数,但是可以使用泛型类型参数调用静态成员吗?例如:- 这里的add()是一个静态方法。 在类似的主题上也有一些C#问题和答案,但是我不太确定如何在Java中使用它。 问题答案: 不,如果A是泛型类型,则无法执行。(Bozho对fast的回答是:),可能认为A是具体类型。 可行的方法如下。 但这可能不是您想要的。 阅读您的评论后,听起来您真正想要做的是: 您
问题内容: 我遇到了一个涉及静态泛型方法的奇怪情况。这是代码: 我为什么不必在表达式中指定任何类型参数?这是某种类型推断吗?如果我想对此进行明确说明,如何指定类型参数? 问题答案: 是的,根据JLS第15.12.2.8节,这是基于分配目标的类型推断。明确地说,您可以这样称呼:
我是Android编码的n00b,今天我想尝试使用定位服务。 我设置了一个简单的类和一个简单的main,只是为了得到经度和纬度。 但当我尝试调用retrive的构造时,long and latitude Android Studio弹出了一个错误: 错误:(33,16)错误:无法从静态上下文引用非静态变量纬度 这是我的位置班