在 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);
}
}
关于编译此方法,其中 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);
}
}