问题列表 - 第44006页

为什么封闭类不包含在内部类构造函数的泛型参数中?

看看这个.

import java.lang.reflect.*;
import java.util.Arrays;

class Test {
    class Inner {
        public <T> Inner(T arg) {}
    }

    public static void main(String[] args) {
        Constructor<?> constructor = Test.Inner.class.getConstructors( )[0];
        System.out.println(
            "Regular parameters: " +
            Arrays.toString(constructor.getParameterTypes()) +
            "\nGeneric parameters: " +
            Arrays.toString(constructor.getGenericParameterTypes())
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此打印以下内容.

常规参数:[类Test,类java.lang.Object]
通用参数:[T]

我对Java内部类(即非静态)的理解是它们的构造函数隐式地为它们的封闭类提供了一个参数.因此,要获取实例Inner,您可以像这样调用它的构造函数.

Test.Inner foo = new Test().new Inner(new Object());
Run Code Online (Sandbox Code Playgroud)

实际发生的是将实例Test传递给构造函数Inner(以及任何其他参数),并将其分配给隐式实例字段.

检查这个结构的nullary构造函数Inner,因为调用getParameterTypes返回一个包含Class表示TestObject(擦除T)的对象的数组.

但是,由于构造函数是通用的,因此调用getGenericParameterTypes将返回仅包含类型变量的数组T.缺少封闭类的隐式参数.

只有当内部类构造函数声明一个类型变量时,才会发生这种情况.为什么这样做?这是一个错误吗?

java generics reflection

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

WinForms:是否存在将标签与文本框相关联的概念?

我正在使用Visual Studio 2010和C#.在Windows窗体开发中是否存在以某种方式将标签链接到文本框的概念?什么东西让他们作为一个整体一起移动?在ASP.NET世界中,有标签控件的AssociatedControlId属性.我还认为我记得MS Access表单设计者有一些方法可以将标签与控件相关联(或链接).此功能是否甚至存在于Visual Studio世界中?

如果没有,如何使用控件对标签进行分组,以便在移动文本框时也不必手动移动标签?

c# label textbox visual-studio winforms

20
推荐指数
2
解决办法
3万
查看次数

在Ruby on Rails 3中使用小数

我正在尝试计算产品的平均净价.我的产品型号中有:total_sold和:total_net_revenue.在方法中进行直接划分似乎总是导致0.我使用BigDecimal,因为我认为这是问题...但是使用我最新的代码迭代,当答案出现时,我仍然会得到零小数.

def avg_price
  BigDecimal(total_sold.to_s) / (BigDecimal(total_net_revenue.to_s) / 100)
end  
Run Code Online (Sandbox Code Playgroud)

净收入是美分,这就是我除以100的原因.有人可以指出我做错了什么或应该做什么?

ruby ruby-on-rails ruby-on-rails-3

11
推荐指数
3
解决办法
2万
查看次数

你能避免在memoizing泛型方法中取消装箱吗?

我有一个泛型方法,用于记忆db中字符串值的转换为实际转换值.

public MySpecialValue {
    object val;
    bool valSet = false; 

    T GetValue<T> () { 
         if (!valSet)
         {
                val = (T)Convert.ChangeType(DatabaseValue, typeof(T));
                valSet = true;
         }
         return (T)val;
     }

     public string DatabaseValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问题是在初始化期间我不知道数据库中的数据是什么类型,它只在第一次调用时才能做出这个决定.

有没有办法以这样的方式构造它,以至于它不被强制为缓存的unbox值类型?(不改变包含类的签名)

c# generics boxing memoization

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

如何将Option [X]的Scala集合转换为X的集合

我开始探索Scala,我所吸引的一件事就是Option能够消除null相关错误的类型和承诺.

但是,我还没有能够弄清楚如何将列表(或其他集合)Option[String]转换为集合String(显然过滤掉任何值None).

换句话说,我如何从中得到:

List[Option[Int]] = List(Some(1))
Run Code Online (Sandbox Code Playgroud)

......对此:

List[Int] = List(1)
Run Code Online (Sandbox Code Playgroud)

如果这对答案有任何影响,我正在使用Scala 2.8.

scala scala-collections scala-option

74
推荐指数
2
解决办法
3万
查看次数

如何限制上下文菜单仅针对Chrome扩展程序中的特定选定文字显示?

我做了一个非常简单的chrome扩展,允许用户突出显示DOI号码,右键单击并选择"Resolve DOI",然后将它们发送到相关的网页.现在,这是在background.html中完成的:

chrome.contextMenus.create({
"title" : "Resolve DOI",
"type" : "normal",
"contexts" : ["selection"],
"onclick" : getClickHandler()
});
Run Code Online (Sandbox Code Playgroud)

我想限制上下文菜单选项仅在他们突出显示的文本以"10"开头时才会出现.有关如何做到这一点的任何建议?我是否需要等待Context Menus模块变得更高级?

javascript google-chrome-extension

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

获取iframe的源代码

反正有没有得到iframe加载页面的源代码?我不想更改任何代码,我只想阅读它.我还需要能够使用javascript/html获得此功能.

html javascript iframe

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

Scala表达式替换字符串中的文件扩展名

这是我用split编写的一个版本:

fileName.split('.').init ++ Seq("js") mkString "."
Run Code Online (Sandbox Code Playgroud)

这种转换例如foo.bar.coffeefoo.bar.js.

我喜欢什么:

  • 有用
  • 它不依赖于像 indexOf()
  • 它感觉功能;)

我不喜欢的:

  • 它并不像我希望的那么短
  • 它可能会让一些读者感到困惑

我怎么能写一个更简单/更简单的版本?

更新:下面的答案很棒!简而言之:

  • 看起来我上面的原始方法并不差,虽然它没有涵盖一些极端情况,但如果你需要覆盖那些可以修复更长的表达
  • 另一种略短的方法使用正则表达式,根据你的正则表达式背景,它可以或多或少地具有可读性
  • 原始方法的语法略短(未涵盖的角点案例)如下:

    fileName.split('.').init :+ "js" mkString "."

scala

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

从preg_match_all()获取行号

我正在使用PHP的preg_match_all()来搜索使用file_get_contents()导入的字符串.正则表达式返回匹配但我想知道找到匹配的行号.实现这一目标的最佳技术是什么?

我可以将文件作为数组读取并为每一行执行正则表达式,但问题是我的正则表达式匹配回车符(新行)的结果.

php regex

15
推荐指数
2
解决办法
7584
查看次数

Cython的计算不正确

我实现了Madhava-Leibniz系列来计算Python中的pi,然后在Cython中提高速度.Python版本:

from __future__ import division
pi = 0
l = 1
x = True
while True:
    if x:
        pi += 4/l
    else:
        pi -= 4/l
    x = not x
    l += 2
    print str(pi)
Run Code Online (Sandbox Code Playgroud)

Cython版本:

cdef float pi = 0.0
cdef float l = 1.0
cdef unsigned short x = True
while True:
    if x:
        pi += 4.0/l
    else:
        pi -= 4.0/l
    x = not x
    l += 2
    print str(pi)
Run Code Online (Sandbox Code Playgroud)

当我停止Python版本时,它已正确计算pi为3.141592.Cython版本最终以3.141597结束,有一些我不记得的数字(我的终端崩溃),但是不正确.为什么Cython版本的计算不正确?

python pi cython

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