小编yan*_*kee的帖子

使IntelliJ能够识别XML文件中Java元素的链接

我有一个链接到Java资源的自定义XML格式.为简单起见,我们假设我的XML文件如下所示:

<root>
  <java-class>my.fully.qualified.class.name</java-class>
</root>
Run Code Online (Sandbox Code Playgroud)

最终我的引用会更复杂一些.它不会直接包含完全限定的类名,我需要一些逻辑来解析正确的类,但我希望这里的示例尽可能简单.

现在我希望它可以Strg +单击元素的文本,并希望IntelliJ将我带到.java文件,就像在Spring-XML文件中一样.在IDEA插件开发常见问题中,有一个名为" 如何在XML文件中添加对Java元素的自定义引用? "的链接,这听起来就像我需要的那样.不幸的是,它链接到一个讨论,其中有人或多或少地完成了这样的事情,有一些小问题.不过我明白我可能需要编写接口com.intellij.psi.PsiReference的实现.谷歌搜索"PsiReference"和"IntelliJ"或"IDEA"遗憾的是没有提出任何关于如何使用它的教程,但我找到了听起来很有用的类XmlValueReference.然而再次谷歌搜索"XmlValueReference"没有发现任何有用的如何使用该类.至少PSI Cookbook告诉我,我可以通过使用找到Java类JavaPsiFacade.findClass().我会感谢任何指导正确用法的教程,提示等.

上面链接的讨论提到我需要调用registry.registerReferenceProvider(XmlTag.class, provider)才能在我最终设法实现它时注册我的提供程序,但是哪种类型是"注册表",我从哪里获取它?

intellij-idea

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

无法理解数组声明int [] it2 = new int [] [] {{1}} [0];

请有人帮我理解这个数组的创建方式.

int[] it2= new int[][]{{1}}[0];
Run Code Online (Sandbox Code Playgroud)

it2是一维数组,在右边我们有奇怪的初始化类型.代码编译得很好,但我能够理解它是如何工作的.

java arrays

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

Files.newOutputStream vs FileOutputStream

最初我们FileOutputStream在Java中创建了一个OutputStream简单地将数据传输到文件中的方法.

从Java 7开始,我们也可以调用Files.newOutputStream为我们创建一个行为完全相同的Stream(除了"构造函数" - 参数中的细微差别).

至少在OpenJDK 8中,旧FileOutputStream的write方法是作为本机方法实现的,而通过Files.newOutputStream创建的OutputStream 创建一个ByteChannel然后由委托给ByteChannel的OutputStream包装.

第二种方法读取相当复杂,所有包装器调用写入通过.一些天真的性能测试表明,新方法的速度要快一点,但这并不是很多,也很难提及.但是,也许我没有选择最好的用例.

在OpenJDK中基于ByteChannel的新实现背后的原因是什么?速度快吗?是否存在实际上明显更快的情况?为什么?

(我知道这是JRE依赖的,不应该依赖于确切的实现.这主要是对背景的好奇心).

java openjdk

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

如何在Spring中注入List实例?

什么有效

假设我有一个ArrayList的spring bean定义:

<bean id="availableLanguages" class="java.util.ArrayList">
    <constructor-arg>
        <bean class="java.util.Arrays" factory-method="asList">
            <constructor-arg>
                <list>
                    <value>de</value>
                    <value>en</value>
                </list>
            </constructor-arg>
        </bean>
    </constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

现在我可以将它注入各种bean中,例如:

@Controller
class Controller {
    @Autowired
    public Controller(ArrayList<String> availableLanguages) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这非常有效.

怎么打破

但是,如果我稍微改变我的控制器并使用类型List而不是ArrayList这样:

@Controller
class Controller {
    @Autowired
    public Controller(List<String> availableLanguages) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我获得了所有类型bean的列表,String而不是我定义的bean.但是我实际上想要将List包装到一个不可修改的List中,但只有将我的依赖项降级到列表才能实现.

到目前为止发现了解决方法

以下XML文件:

<bean id="availableLanguages" class="java.util.Collections" factory-method="unmodifiableList">
    <constructor-arg>
        <bean class="java.util.Arrays" factory-method="asList">
            <constructor-arg>
                <list>
                    <value>de</value>
                    <value>en</value>
                </list>
            </constructor-arg>
        </bean>
    </constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)

与此控制器一起使用:

@Controller
class Controller { …
Run Code Online (Sandbox Code Playgroud)

java spring spring-ioc

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

使用Jasmine拦截EventEmitters

我正在构建一个node.js模块,我也希望用Jasmine测试它.

假设我的模块看起来与此类似:

var myModule = function (foo, bar) {

  // Begin a workflow
  var workflow = new (require('events').EventEmitter)();

  workflow.on('test', function () {
    var greet = greet();
    return greet;
  });

  workflow.emit('test');

};

function greet () {
  return "Hi!";
}

module.exports = {
  myModule: myModule
};
Run Code Online (Sandbox Code Playgroud)

如何使用Jasmine测试我的模块,定位我发出的所有事件?

像这样的东西:

var myModule = require('../myModule.js');    

describe('My Module test', function () {

  it('should get greet value', function () {
    myModule.on('test', function () { // "test" as I wrote in myModule
      expect(myModule.greet).toHaveBeenCalled();
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

javascript jasmine

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

java.util.prefs.FileSystemPreferences尝试打开损坏的路径

从最近开始,一些java应用程序开始打印以下警告:

java.util.prefs.FileSystemPreferences syncWorld
WARNING: Couldn't flush user prefs: java.util.prefs.BackingStoreException: /home/yha/.java/.userPrefs/_!(k![@"k!'`!~!"p!(@!bw"y!#4![!"v!':!d@"t!'`!bg"0!&@!e@"w!'`!ew"0!(k!c!"l!&:!d!"y!'k!bg"n!$0!,w"h!(!!c!"s!'k!}w"h!(@!a@"v!'4!.@"5!'}!a@"s!'`!cw!n!(0= create failed.
Run Code Online (Sandbox Code Playgroud)

"创造失败".开玩笑吧!这是什么类型的文件名?

谷歌搜索之后,我现在知道Java首选项子系统是什么,并且Linux上存储的默认值应该是$HOME/.userPrefs等等,但是...不能解释我的日志消息中的路径来自何处.我仍然不知道在哪里设置这个值.也许有一个配置文件,其中某个存储文件路径已损坏.

在Kubuntu 12.10上使用openjdk-7

java openjdk preferences

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

单元测试中的文件访问是否错误?

在编写处理XML的单元测试时(例如,测试读取/生成XML的类)我曾经在单元测试旁边的单独文件中编写断言结果XML-String/my input XML String.假设我有一个"MyTransformer"类,它将一种XML格式转换为另一种XML格式.然后我会在同一个包中创建三个文件:

  • MyTransformerTest.java
  • MyTransformerTestSampleInput.xml
  • MyTransformerTestExpectedOutput.xml

然后我的断言可能看起来像这样(为简单起见,简化的伪代码):

Reader transformed = MyTransformer.transform(getResourceAsStream("MyTransformerTestSampleInput.xml")));
Reader expected = getResourceAsStream("MyTransformerTestExpectedOutput.xml");
assertXMLEqual(expected, transformed);
Run Code Online (Sandbox Code Playgroud)

However a colleague told me that the file access that I have in this unit test is unacceptable. He proposed creating a literal string constant (private static final String) containing my XML file contents, possibly in a separate groovy class because of the benefit of multi line strings rather than writing the XML file into files.

I dislike the idea of the …

unit-testing

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

如何使用API​​(针对MCN)从YouTube CMS帐户获取收入报告?

我可以访问YouTube CMS帐户(适用于MCN).在YouTube上,我可以使用它做很多事情,这还包括下载包含有关收入详细信息的CSV报告.

但是,我想对该数据进行一些自动处理,从而使用API​​而不是手动CSV下载来访问数据.它看起来像YouTube数据分析的内容所有者报告应包含这些数据为好,因此我试图从这个API得到一些数据(目前仅使用API浏览器),但我能得到了一个"禁止"响应唯一.

该API浏览器告诉我,对于一个CMS帐户,我需要指定contentOwner == OWNER_NAME但无处是OWNER_NAME会是怎样的解释.我试图只插入我的CMS帐户的显示名称,用下划线替换空格,但没有成功.如何找出我的所有者名称?

此外,当我使用OAuth进行身份验证时,我会像往常一样收到帐户列表,我可以选择使用哪个帐户(例如我所管理的所有YouTube频道),但未列出CMS帐户.但是,如果我去YouTube,我可以点击右上角,然后切换到CMS.不知道这是否重要......

然后,也许我完全走错了路,因为我想获得连接到我的MCN的所有频道的报告,但这并不意味着我拥有内容.也许我不是内容所有者?在这种情况下:从API请求报告的正确方法是什么?

youtube youtube-api

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

Angular2在装饰器中测试数据

我有一个组件,我想在单元测试中检查选择器

@Component({
     selector: 'my-component',
)}
Run Code Online (Sandbox Code Playgroud)

我想这样测试

describe('My Component', function(){ 
   it('should have a selector', function() {
      expect( ___ ).toBe('my-component');
   }); 
)}
Run Code Online (Sandbox Code Playgroud)

jasmine angular

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

为什么 java.awt.Font.getStringBounds 在不同的机器上给出不同的结果?

我有一个生成 PDF 报告的应用程序(使用 JasperReports),但是如果我在我的开发笔记本电脑上运行我的应用程序,文本字段的大小与我在服务器上生成完全相同的报告时略有不同。我最终将问题简化为以下代码:

final Font font = Font.createFont(
    Font.TRUETYPE_FONT,
    MyTest.class.getResourceAsStream("/fonts/europa/Europa-Bold.otf")
).deriveFont(10f);
System.out.println(font);
System.out.println(font.getStringBounds(
    "Text",
    0,
    4,
    new FontRenderContext(null, true, true)
));
Run Code Online (Sandbox Code Playgroud)

在我的笔记本电脑上打印:

java.awt.Font[family=Europa-Bold,name=Europa-Bold,style=plain,size=10]
java.awt.geom.Rectangle2D$Float[x=0.0,y=-9.90999,w=20.080002,h=12.669988]
Run Code Online (Sandbox Code Playgroud)

在服务器上打印:

java.awt.Font[family=Europa-Bold,name=Europa-Bold,style=plain,size=10]
java.awt.geom.Rectangle2D$Float[x=0.0,y=-7.6757812,w=20.06897,h=10.094452]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我实际上将字体文件与应用程序一起发送,因此我相信两台机器实际上不可能使用不同的字体。

我猜想,在这些条件下, 的输出与getStringBounds系统无关。显然不是。什么可能导致差异?

java fonts awt

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