我有通用类,看起来像:
interface X<Input, Output>
{
Output process(Input input);
}
class Y implements X<Integer, Float>
{
Float process(Integer input);
}
Run Code Online (Sandbox Code Playgroud)
我使用getDeclaredMethods来查找Y上的进程只是用它的名字(而不是有意的参数).当我查看返回Method []时,进程显示两次,使用Input = Object,Output = Object,然后使用实际的实例化类型:Integer和Float.
请注意:我可以在Method []和1函数中看到1个带Object,Object的函数,其中包含我用来实例化的实际类型,如Integer,Float.所以,我感兴趣的第二个函数可以从Method []访问.
只获得实际类型的方法的最佳方法是什么?
将unique_ptr传递给什么都不做的自定义删除工具最简洁的方法是什么?我需要一个我正在编写的JNI函数,其中C++端需要unique_ptr,但是,我不希望在退出JNI函数时删除unique_ptr所持有的对象 - 我稍后会处理删除.所以我想做一些像:
std::unique_ptr<MyClass, noop_delete> ptr;
Run Code Online (Sandbox Code Playgroud)
在一行中 - 没有单独的函数定义:-)
我是一个Haskell新手,请原谅我问这可能是显而易见的,但我对此感到惊讶:
len2 :: [a] -> Int
len2 xx = if xx == [] then 0 else 1 + (len2 (tail xx))
Run Code Online (Sandbox Code Playgroud)
给我:
No instance for (Eq a) arising from a use of ‘==’
Possible fix:
add (Eq a) to the context of
the type signature for len2 :: [a] -> Int
In the expression: xx == []
Run Code Online (Sandbox Code Playgroud)
我很惊讶,因为我认为Haskell可以判断一个列表是否在[]没有查看任何元素的情况下(在C++中,我会看到列表的大小为0,并将其留在那里,例如).
我想在Scala中这样做:
def sum[T](seq: Seq[T]): T =
seq match {
case last :: Nil => last
case head :: tail => head + sum(tail)
}
Run Code Online (Sandbox Code Playgroud)
但斯卡拉抱怨说有一种类型不匹配sum(tail):它正在期待String但却得到了T- 当然听起来不对.我调查了一下,看起来Scala的类型推理系统只能推断出tail类型Seq[Any].这是问题吗?在Scala中写这个的正确方法是什么?
我在Java中发现以下代码非凡:
ArrayList<String> l1 = new ArrayList<String>();
ArrayList<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); // true
System.out.println(l2.getClass().isAssignableFrom(l1.getClass())); // true too
//ArrayList<Integer> l3 = l1; // won't compile though
Run Code Online (Sandbox Code Playgroud)
我不太了解"isAssignableFrom"的细节.当然,我希望编译器停止l3 = l2,但它似乎与前一行相矛盾?(我确定这里有微妙的要点,这就是我所追求的:-)
我需要将uuid放置在我无法控制的内存中的位置(将指针传递给我(由文件进行shm支持)),但是我必须确保在给定指针处存储的内容是可移植的,即我想使用boost :: endian来解决uuid的little endian问题。可以结合使用boost :: endian和boost:uuid吗?
是否有可能完全以编程方式创建"Spark MiniCluster"以从Scala程序中运行小型Spark应用程序?我不想启动Spark shell,而是在我的程序的Main中完全制作一个"MiniCluster".
我正在尝试将形式为"201110250830"(yyyyMMddhhmm)的字符串时间戳转换为毫秒(长).我正在使用以下代码:
Calendar t = Calendar.getInstance();
t.set(Integer.parseInt(ts.substring(0,4)),
Integer.parseInt(ts.substring(4,6)) - 1, // month is 0 based!
Integer.parseInt(ts.substring(6,8)),
Integer.parseInt(ts.substring(8,10)),
Integer.parseInt(ts.substring(10,12)),
0);
return t.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)
但是,我有时会出现几毫秒的差异.例如:
long t1 = timestampToLong("201110250830");
long t2 = timestampToLong("201110250831");
assertEquals(60*1000, t2 - t1);
Run Code Online (Sandbox Code Playgroud)
有时给我:
Got exception: java.lang.AssertionError: expected:<60000> but was:<60001>
Run Code Online (Sandbox Code Playgroud)
我检查了文档,但我找不到任何相关的内容.任何的想法?(看起来像是美好的一天,我将在这里学到一些东西!:-)
谢谢!
我想Scala的改写&&,以and下面的方式(我喜欢蟒蛇,这就是为什么我试图做到这一点):
def and(p1: () => Boolean, p2: () => Boolean): Boolean = p1() && p2()
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用它时,例如:
def and(p1: () => Boolean, p2: () => Boolean): Boolean = p1() && p2()
if ((l < h.length) and (h(l) > h(i)))
Run Code Online (Sandbox Code Playgroud)
(我def之前只是为了调试而把它放在线上,以确保它不是可见性问题),我得到:
Error:(40, 26) value and is not a member of Boolean
if ((l < h.length) and (h(l) > h(i)))
Run Code Online (Sandbox Code Playgroud)
这里发生了什么???
当我在Scala的REPL中键入这个单行时,我看到以下内容,但它在IntelliJ中工作正常.到底是怎么回事?
scala> def sum[T: Numeric](seq: Seq[T]): T = if (seq.size == 1) seq.head else seq.head + sum(seq.tail)
<console>:12: error: type mismatch;
found : Seq[T]
required: Seq[String]
def sum[T: Numeric](seq: Seq[T]): T = if (seq.size == 1) seq.head else seq.head + sum(seq.tail)
^
Run Code Online (Sandbox Code Playgroud) java ×3
scala ×3
c++ ×2
generics ×2
apache-spark ×1
boost ×1
c++11 ×1
calendar ×1
haskell ×1
reflection ×1
types ×1
unique-ptr ×1