gpt4 book ai didi

java - 如果main方法被参数化了,那么如何指定它的真实类型呢?

转载 作者:行者123 更新时间:2023-12-01 11:14:33 25 4
gpt4 key购买 nike

public class TestA {

@SuppressWarnings("unchecked")
public static <T> void main(String...args) throws InterruptedException {
Thread.currentThread().setName("--Parent--");
final InheritableThreadLocal<T> itl = new InheritableThreadLocal<T>() {
@Override
protected T childValue(T i)
{
System.out.println(Thread.currentThread().getName() + "\r\n" + i );
return i;

}
};

itl.set((T) new Integer(33));

Runnable r = new Runnable() {
@Override
public void run() {
Thread.currentThread().setName("--local--");
System.out.println(Thread.currentThread().getName() + "\r\n" + itl.get());

}
};

new Thread(r).start();
System.out.println(itl.get());
}
}

那么我如何在这里指定类型。由于上述代码中没有指定类型,因此默认的对象类型如图所示。我想让本地内部类“InheritableThreadLocal”通用。

最佳答案

So how can I specify a type here.

你不能。

或者至少...如果 main 则无法指定类型方法在启动 JVM 时用作应用程序入口点方法。

但是,这并不重要:

  • 由于泛型是使用类型删除来实现的,main方法代码无法判断 T 的真实类型无论如何。

  • 由于方法无法判断,所以它是什么并不重要。

<小时/>

请注意,在您的示例中,唯一出现 T 的地方被“使用”在类型转换 (T) 中。如果删除 @SuppressWarning注解,编译器会告诉你类型转换是未经检查的转换;即它不执行任何操作。

您会发现这与通用 main 的任何其他(可编译)示例相同。你可以写。基本上没有办法写一个通用的main类型参数实际上很重要。

<小时/>

注释:

  1. JLS 并未声明main入口点方法不能有类型参数;请参阅JLS 12.1.4 .

  2. 一个简单的 Java 应用程序,带有参数化 main编译没有错误,运行也没有错误。

关于java - 如果main方法被参数化了,那么如何指定它的真实类型呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31988725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com