我有一个链接到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)才能在我最终设法实现它时注册我的提供程序,但是哪种类型是"注册表",我从哪里获取它?
请有人帮我理解这个数组的创建方式.
int[] it2= new int[][]{{1}}[0];
Run Code Online (Sandbox Code Playgroud)
it2是一维数组,在右边我们有奇怪的初始化类型.代码编译得很好,但我能够理解它是如何工作的.
最初我们FileOutputStream在Java中创建了一个OutputStream简单地将数据传输到文件中的方法.
从Java 7开始,我们也可以调用Files.newOutputStream为我们创建一个行为完全相同的Stream(除了"构造函数" - 参数中的细微差别).
至少在OpenJDK 8中,旧FileOutputStream的write方法是作为本机方法实现的,而通过Files.newOutputStream创建的OutputStream 创建一个ByteChannel然后由委托给ByteChannel的OutputStream包装.
第二种方法读取相当复杂,所有包装器调用写入通过.一些天真的性能测试表明,新方法的速度要快一点,但这并不是很多,也很难提及.但是,也许我没有选择最好的用例.
在OpenJDK中基于ByteChannel的新实现背后的原因是什么?速度快吗?是否存在实际上明显更快的情况?为什么?
(我知道这是JRE依赖的,不应该依赖于确切的实现.这主要是对背景的好奇心).
假设我有一个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) 我正在构建一个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) 从最近开始,一些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
在编写处理XML的单元测试时(例如,测试读取/生成XML的类)我曾经在单元测试旁边的单独文件中编写断言结果XML-String/my input XML String.假设我有一个"MyTransformer"类,它将一种XML格式转换为另一种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 …
我可以访问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请求报告的正确方法是什么?
我有一个组件,我想在单元测试中检查选择器
@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) 我有一个生成 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 ×5
jasmine ×2
openjdk ×2
angular ×1
arrays ×1
awt ×1
fonts ×1
javascript ×1
preferences ×1
spring ×1
spring-ioc ×1
unit-testing ×1
youtube ×1
youtube-api ×1