在 Java 中编译这些行 - 以任何方式可能吗?

Compiling these lines in Java - possible in any way?

关于编译此方法,其中 T 是泛型。有没有办法用 javac 编译器 (Java 1.8) 编译它而不会出现任何错误?

public class MyGenericClass<T>{
    public void someGenericAction(T value){
        int key = (int) value;
    }
}

来自德国的问候!

您本质上是在要求一个肮脏的 hack:一般来说,任何类型 将如何强制转换为 int

让我们希望 T 有一个合理的 toString 方法,并利用它:

int key = Integer.parseInt(value.toString());

这至少会编译,因为 Java 中的所有对象都有一个 toString() 方法。但是处理可能在运行时抛出的无数异常是您的工作。您可以为其他原始类型和 T 的特定类型添加重载到您的函数中,您可以在其中做一些比使用 toString() 方法更明智的事情。

我当然希望这在Java中是不可能的。不能保证任何任意类型都可以 "directly" 并安全地类型转换为 int,这正是您的方法所需要的。事实上,对于绝大多数类型来说,并非如此

例如,

(int)"abc"甚至是什么意思? (考虑到 "abc" 是您方法的完全有效输入,这在您提供的方法中在技术上是可能的)。该转换显然是无稽之谈,Java 不应该允许它。你可以想出大量这样的案例,其中这种转换显然是胡说八道。

在技术上可行的情况下,它也可能导致细微的错误。例如,(int)11.2 将导致四舍五入(等于 11),因此会丢失数据。

TL;DR 不,这是不可能的,你也不希望 它成为可能,因为你正在尝试做一些根本没有意义的事情。

你可以做到

class MyGenericClass<T>{
        public static <T>void someGenericAction(T value){
            int key = (Integer)value; // here is your's
            System.out.println(key);
        }

        public static void main(String[] args){
            someGenericAction(12);
        }
}