关于解决问题时遇到的类型参数,我有一个非常基本的问题。
我有一个带有字符串数组的类,正在使用自定义Comparator类进行排序。以下是我的比较器课程
class SortComparator implements Comparator<String>
{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
}
上面的类运行良好,并输出期望的结果。
如果将类名从更改为SortComparator
,SortComparator<String>
则需要更改compare方法。更改后的类如下所示
class SortComparator<String> implements Comparator<String>
{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return ((java.lang.String) o1).compareTo((java.lang.String) o2);
}
}
上面的类也可以正常运行并输出所需的结果
为什么有需要显式转换String
对象o1
,并o2
到java.lang.String
时候他们已经是同一类的对象?
这个问题的答案说是因为shadowing
。
我知道局部变量,实例变量和类变量有阴影,但是在这种情况下它如何工作?
问题在于称为的通用类型String
。这是泛型类型参数与实际类之间的冲突String
。
因为类型参数String
是 无界的
,Java编译器会将其替换Object
,因此方法的参数compare
作品Object
和对象类没有compareTo
方法,因此,你必须投。
尝试下面的示例,效果很好。
class SortComparator<T> implements Comparator<String>
{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
}
请查看有关泛型类型清除的
Java文档
在类型擦除过程中,Java编译器将擦除所有类型参数,如果类型参数是有界的,则将每个参数替换为其第一个边界;如果类型参数是无界的,则将其替换为对象。
下面的Example直接从上面的Java文档复制而来,以更加清楚。
考虑以下表示单个链接列表中的节点的通用类:
public class Node<T> {
private T data;
private Node<T> next;
public Node(T data, Node<T> next) }
this.data = data;
this.next = next;
}
public T getData() { return data; }
// ...
}
由于类型参数T是无界的,因此Java编译器将其替换为Object:
public class Node {
private Object data;
private Node next;
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
public Object getData() { return data; }
// ...
}
一、泛型 Scala 支持类型参数化,使得我们能够编写泛型程序。 1.1 泛型类 Java 中使用 <> 符号来包含定义的类型参数,Scala 则使用 []。 class Pair[T, S](val first: T, val second: S) { override def toString: String = first + ":" + second } object ScalaAp
参数 概念 -Xint 解释执行,运行时将 class 翻译成机器码。 -Xcomp 编译执行,第一次使用时,以方法为单位,将热点代码翻译成机器码,保存在 JVM 中。 -Xmixed 混合 -XX 参数 Boolean 类型 -XX:[+-]\ 非 Boolean 类型 -XX:\=\
很好的一天。我不熟悉使用VSCode键入脚本。 获取以下错误: > 错误TS2322:类型'()= 代码: DTO。输电系统 LinkedObject.ts 我正在尝试使用上述接口方法实例化类: TravelClientFormPopulator.ts 任何帮助都将不胜感激。
问题内容: 我有一个方法以a 作为参数。 在中,我如何知道a 是还是a 是? 问题答案: 根据用户omain的回答“如果使用<?>,则意味着您将不会在任何地方使用参数化类型。要么转到特定类型(在您的情况下,似乎是),要么转到非常通用的“ 另外,我相信如果您使用问号,编译器将在运行时(类型;有效Java的第119页)消除类型不匹配的情况,绕过擦除,并有效地消除了使用泛型类型所带来的好处? 要回答发问
问题总结:我想传递一个带有类型参数(如
在我新创建的Angular应用程序中,我尝试使用mattlewis92的Angular日历来创建他的日历。我已经复制了他的github:https://mattlewis92.github.io/Angulat-calendar/#/kitchenter-sink上列出的所有步骤和代码,但我在第一行总是发现一个错误,即指出“{static:boolean;}类型的参数不能分配给{read?:any