小编Fra*_*ank的帖子

使用getDeclaredMethods中的实际类型查找泛型方法

我有通用类,看起来像:

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 []访问.

只获得实际类型的方法的最佳方法是什么?

java generics reflection

2
推荐指数
1
解决办法
592
查看次数

对unique_ptr没有op删除

将unique_ptr传递给什么都不做的自定义删除工具最简洁的方法是什么?我需要一个我正在编写的JNI函数,其中C++端需要unique_ptr,但是,我不希望在退出JNI函数时删除unique_ptr所持有的对象 - 我稍后会处理删除.所以我想做一些像:

std::unique_ptr<MyClass, noop_delete> ptr;
Run Code Online (Sandbox Code Playgroud)

在一行中 - 没有单独的函数定义:-)

c++ unique-ptr c++11

2
推荐指数
1
解决办法
2478
查看次数

Haskell令人惊讶的功能签名

我是一个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,并将其留在那里,例如).

haskell

2
推荐指数
1
解决办法
66
查看次数

依赖类型并依赖于在scala中运行的参数

我想在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中写这个的正确方法是什么?

types scala

2
推荐指数
1
解决办法
42
查看次数

Java泛型,来自C++模板

我在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,但它似乎与前一行相矛盾?(我确定这里有微妙的要点,这就是我所追求的:-)

java generics

1
推荐指数
1
解决办法
98
查看次数

增强uuid +增强字节序

我需要将uuid放置在我无法控制的内存中的位置(将指针传递给我(由文件进行shm支持)),但是我必须确保在给定指针处存储的内容是可移植的,即我想使用boost :: endian来解决uuid的little endian问题。可以结合使用boost :: endian和boost:uuid吗?

c++ boost

1
推荐指数
1
解决办法
279
查看次数

Spark MiniCluster

是否有可能完全以编程方式创建"Spark MiniCluster"以从Scala程序中运行小型Spark应用程序?我不想启动Spark shell,而是在我的程序的Main中完全制作一个"MiniCluster".

apache-spark

1
推荐指数
1
解决办法
440
查看次数

Java Calendar.getTimeInMillis

我正在尝试将形式为"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)

我检查了文档,但我找不到任何相关的内容.任何的想法?(看起来像是美好的一天,我将在这里学到一些东西!:-)

谢谢!

java calendar

0
推荐指数
1
解决办法
5862
查看次数

重写Scala &&和

我想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

0
推荐指数
1
解决办法
171
查看次数

在IntelliJ中运行的Scala代码在Scala的REPL中失败

当我在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)

scala intellij-idea

0
推荐指数
1
解决办法
49
查看次数