我有一个类:
public class Barn {
String type;
Animal animal;
}
public class Horse extends Animal {
}
public class Cow extends Animal {
}
Run Code Online (Sandbox Code Playgroud)
我想序列化它们的列表:
List<Barn> barns = new ArrayList<Barn>();
Barn barn1 = new Barn();
barn1.setType("horse");
barn1.setAnimal(new Horse());
barns.add(barn1);
Barn barn2 = new Barn();
barn2.setType("cow");
barn2.setAnimal(new Cow());
barns.add(barn2);
...
Group<Barn> barns = gson.fromJson(serialized);
Run Code Online (Sandbox Code Playgroud)
当我序列化时,Animal属性的类型信息将丢失.有没有办法我可以以某种方式安装解析器监听器,以便我可以提供正确的类来反序列化,因为遇到列表中的每个元素?这就是手动提供描述类类型的字符串的想法.
谢谢
我有恒定大小的数组(现实生活中的大小 = 20),允许重复例如:
1 2 2 3 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
现在只有一个元素更新:
1 5 2 3 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
我需要使用这个数组。我应该只使用冒泡排序吗?
更新我不知道如何称呼我写的东西。但我想不可能更快地排序。欢迎评论!
// array is already almost sorted and INCREASING, element at pos need to be inserted to the right place
private void SortQuotes(List<Quote> quoteList, int pos)
{
var quoteToMove = quoteList[pos];
if (pos == 0 || quoteList[pos - 1].Price < quoteToMove.Price)
{
MoveElementsDown(quoteList, pos);
} else if (pos == quoteList.Count - 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将类型标记转换为维护/保留正常擦除类型参数的 Java 类。有不少库受益于此类转换(例如 Jackson 和 Guice)。我目前正在尝试将Manifest基于代码的代码迁移到,TypeTag因为Manifests 对于某些极端情况是不够的。
与其他数据类型相比,JVM 将数组视为特殊的。aclassOf[Int]和之间的区别在于classOf[Array[Int]]该方法Class.isArray()将为后者返回true。
该Manifest实施很简单。Manifest.erasure是一个已经有效/真实的Class实例isArray()。
该TypeTag实施是棘手。没有快速简便的erasure方法。事实上,“类似”的 TypeTag 变体,RuntimeMirror.runtimeClass不喜欢代表我们处理创建任何基于 Array 的类。阅读文档:
注意:如果Scala符号是ArrayClass,会抛出ClassNotFound异常,因为没有唯一的Java类对应一个Scala泛型数组
为了解决这个问题,我尝试检测它是否是一个数组。如果它是一个数组,那么我手动创建类对象。但是,当 Array 具有未知类型参数时,我遇到了一个额外的边缘情况。
首先让我向您展示一个不是 HigherKinded 类型的示例。
import scala.reflect.runtime.universe._
class A[T]
val innerType = typeOf[A[Array[_]]].asInstanceOf[TypeRefApi].args.head
innerType <:< typeOf[Array[_]] // Returns true.
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。
class B[T[_]]
val innerType = typeOf[B[Array]].asInstanceOf[TypeRefApi].args.head
innerType <:< typeOf[Array[_]] // Returns false.
Run Code Online (Sandbox Code Playgroud)
我无法创建 typeOf[Array] 因为它抱怨缺少参数。如何检测 B 的类型参数为 …