Java 使用通用接口
这两个类声明之间有什么区别吗 1: 2: 我认为这是有区别的。但我找不到一个能显示差异的例子,因为我不完全理解Java 使用通用接口,java,generics,interface,legacy,type-erasure,Java,Generics,Interface,Legacy,Type Erasure,这两个类声明之间有什么区别吗 1: 2: 我认为这是有区别的。但我找不到一个能显示差异的例子,因为我不完全理解 你能给我举个例子吗?有一点不同。第一种是使用原始类型,因此类型安全性较差。例如: 这是可行的,但不应该奏效 class MyClass<T extends Number & Comparable> { void use(T t) { String s = null; t.compareTo(s); // Works,
你能给我举个例子吗?有一点不同。第一种是使用原始类型,因此类型安全性较差。例如: 这是可行的,但不应该奏效
class MyClass<T extends Number & Comparable>
{
void use(T t)
{
String s = null;
t.compareTo(s); // Works, but will cause a runtime error
}
}
然而这不起作用,因为它不应该起作用
class MyClass<T extends Number & Comparable>
{
void use(T t)
{
String s = null;
t.compareTo(s); // Works, but will cause a runtime error
}
}
编辑:完整代码,根据要求:
class MyClass<T extends Number & Comparable>
{
void use(T t)
{
String s = "Laziness";
t.compareTo(s); // Works, but will cause a runtime error
}
}
public class MyClassTest
{
public static void main(String[] args)
{
MyClass<Integer> m = new MyClass<Integer>();
Integer integer = new Integer(42);
m.use(integer);
}
}
您的第一个代码段使用了原始类型,您不应该使用它。@Paul Bellorano,我读过这个主题。我有一个具体的问题!我建议你再看一遍。它正好解决了这个问题。我不同意你的看法。你应该仔细阅读教程,更加熟悉基础知识和术语。然后你可能也会同意他的观点。这很有效,但不应该有效。很好的短语//有效,但会导致运行时错误。你能显示完整的代码吗?@gstackoverflow创建第一个MyClass的实例,并调用其use方法,传递适当的参数。“我想你能做的就这么多了。”gstackoverflow补充了一个例子
class MyClass<T extends Number & Comparable<T>>
{
void use(T t)
{
String s = null;
t.compareTo(s); // Compile-time error
}
}
class MyClass<T extends Number & Comparable>
{
void use(T t)
{
String s = "Laziness";
t.compareTo(s); // Works, but will cause a runtime error
}
}
public class MyClassTest
{
public static void main(String[] args)
{
MyClass<Integer> m = new MyClass<Integer>();
Integer integer = new Integer(42);
m.use(integer);
}
}