我正在努力提高我的Java优化技能.为了实现这一目标,我制作了一个旧程序,并且我正在尽力使其变得更好.在这个程序中,我使用SL4J进行日志记录.为了得到我做的记录器:
private static final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
Run Code Online (Sandbox Code Playgroud)
在我编写代码的时候,我认为这是最好的选择,因为我删除了对类名的引用(可能会被重构).但现在我不再那么肯定了......
private static final Logger logger = LoggerFactory.getLogger(ClassName.class);
Run Code Online (Sandbox Code Playgroud)
另一方面,保留对类名的引用,但它会删除一个方法调用.对于一个班级来说,这可能不是一个很大的改进,但是当你有很多班级时,这可能就是一个问题.
所以我的问题是:
哪种方法更好?使用类名还是通过反射获取?
请用正反面来激励你的答案.谢谢.
我是注释处理的新手,我正在尝试使用Maven使其自动化。我把它放在我的pom.xml中:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<annotationProcessors>
<annotationProcessor>
co.aurasphere.revolver.annotation.processor.InjectAnnotationProcessor</annotationProcessor>
<annotationProcessor>
co.aurasphere.revolver.annotation.processor.RevolverContextAnnotationProcessor</annotationProcessor>
</annotationProcessors>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试构建项目时,由于Maven无法找到处理器,所以我收到CompilationFailureException。
我发现了这样的其他问题,可以通过将依赖项放在插件之外来解决。我尝试过,但是对我来说没有任何改变。
我想念什么吗?
谢谢。
编辑
这是我对另一个包含处理器和注释的项目的依赖:
<dependencies>
<dependency>
<groupId>co.aurasphere</groupId>
<artifactId>revolver-annotation-processor</artifactId>
<version>0.0.3-SNAPSHOT</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
编辑2:
经过进一步调查,我决定反编译处理器JAR(使用Maven构建),并且碰巧...我的类不在那里。由于某些原因,Maven没有将我的类编译到JAR中,这就是为什么找不到这些类的原因。我已经尝试找出该版本的问题(以前从未发生过这种情况,而我已经使用Maven了一段时间……)。
首先,该项目的包装是jar。这些类都在src / main / java下。我已经在pom.xml中检查了类路径和源路径是相同的。
这是处理器pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>co.aurasphere</groupId>
<artifactId>revolver-annotation-processor</artifactId>
<version>0.0.3-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
编辑3 …
我需要编辑我的HttpResponse以添加标头值.我正在寻找单点来实现它,并发现这ResponseBodyadvice
将有所帮助.
但是我的新课程中的两种方法都没有被调用过.你能否告诉我是否错过了任何配置.
@ControllerAdvice
public class EditResponseHeader implements ResponseBodyAdvice<object> {
@Override
public boolean supports(MethodParameter returnType,
Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
....
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType,
MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
....
return body;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在研究用于OCP考试的新Stream API,我找到了一些我不太懂的东西.这是我的代码:
void methodOne() {
this.compare(1, 2); // This works fine.
Stream.of(1,2,3)
.sorted(this::compare); // Compilation error.
}
static Integer compare(Integer s1, Integer s2) {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里我有一个名为compare的静态方法和一个名为compare的非静态方法.如果我从非静态方法调用compare方法,我会得到一个编译器警告:
应该以静态方式访问TestStream类型的方法compare(Integer,Integer)
如果我在流中使用对该方法的方法引用,则该编译器警告将成为具有相同消息的编译器错误.
我知道为什么我收到警告,但如果我使用方法引用,我不明白为什么这个警告会成为编译错误.我也没有在网上找到任何东西.有人可以向我解释一下吗?
我正在阅读 Spring Data JPA 官方文档中关于Page
和Slice
(强调我的)之间区别的这一段:
第一种方法允许您将 org.springframework.data.domain.Pageable 实例传递给查询方法,以将分页动态添加到静态定义的查询中。页面知道可用元素和页面的总数。它通过基础结构触发计数查询来计算总数。由于这可能很昂贵(取决于所使用的商店),您可以改为返回 Slice。Slice 只知道下一个 Slice 是否可用,这在遍历更大的结果集时可能就足够了。
我知道如何Page
通过使用相同的 where 子句执行额外的计数查询来获取总元素,但是如何Slice
通过单个查询知道其他元素是否可用?执行的 SQL 是什么?
好吧,这可能是一个愚蠢的问题,但我必须确定......我有一个类需要用自定义注释进行注释。此外,此类必须实现自定义接口。现在的问题是:有什么方法可以只注释类,然后像接口一样使用注释,例如强制方法实现?我认为这是不可能的,但也许有办法......谢谢。
我在 Gradle 构建方面遇到问题。在我的项目中,我使用自己制作的注释处理器。该处理器在最后一轮处理中生成一些源文件。在生成的文件中,有一个类(Revolver)被项目代码引用。问题是 Gradle 似乎同时启动注释处理器和编译。这会产生错误,因为生成的类尚未准备好,因此未找到。
为了验证这一点,我添加了一些调试日志记录。
Note: Starting Revolver Injector generation
Note: Starting Revolver Component Provider generation
Note: Starting Revolver Injector generation
Note: Starting Revolver Component Provider generation
E:\workspace\Android Studio\fix-in-produzione\branches\videocurriculum-client-android\app\src\main\java\co\aurasphere\videocurriculum\view\activity\NetworkBaseActivity.java:14: error: cannot find symbol
import co.aurasphere.revolver.Revolver;
^
symbol: class Revolver
location: package co.aurasphere.revolver
Note: Starting Revolver Injector generation
warning: File for type 'co.aurasphere.revolver.Revolver' created in the last round will not be subject to annotation processing.
Note: Starting Revolver Component Provider generation
warning: File for type 'co.aurasphere.revolver.RevolverComponentProvider' created in the last …
Run Code Online (Sandbox Code Playgroud) 我的 XSD 看起来像这样:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
...
<xs:element name="person">
<xs:complexType>
...
<xs:attribute name="first_name" use="optional" type="xs:string"/>
</xs:complexType>
</xs:element>
...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
我无法将我的适配器注释添加到具体字段(生成的代理类必须有我的适配器注释)。所以结果应该如下:
@XmlJavaTypeAdapter(value=StringAdapter.class, type=String.class)
@XmlAttribute(name = "first_name")
protected String firstName;
Run Code Online (Sandbox Code Playgroud)
但我的绑定没有做任何事情。就像它不存在一样。
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<bindings schemaLocation="XMLreq.xsd" node="/xs:schema/xs:element[@name='person']/xs:complexType/xs:attribute[@name='first_name']" >
<xjc:javaType adapter="x.y.z.StringHashFunctionAdapter" name="java.lang.String" />
</bindings>
</jxb:bindings>
Run Code Online (Sandbox Code Playgroud)
我在代理类生成期间没有错误。
dependencies {
xsd2java "com.sun.xml.bind:jaxb-xjc:2.2.7"
xsd2java "com.sun.xml.bind:jaxb-impl:2.2.7"
}
task xsd2java() {
doLast {
jaxbTargetDir.mkdirs()
ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.xsd2java.asPath)
ant.jaxbTargetDir = jaxbTargetDir
ant.xjc(destdir: '${jaxbTargetDir}', package: 'x.y.z.request', schema: 'src/main/resources/XMLreq.xsd', binding: …
Run Code Online (Sandbox Code Playgroud) 有没有办法在YII2中的查询中选择NULL值或精确字符串?我正在尝试加入3个查询,我需要相同数量的列查询,例如"选择NULL作为返回,提交,数量,NULL作为iamount ....."示例:
$subQuery2 = Loan::find()->select('person_id')->where(['sheet_id' => $id]);
$query2 = new Query();$query2 = new Query();
$query2->select(['last_name','first_name','fc.tax','NULL as returned','fc.submitted','fc.amount','NULL as iamount','NULL as interest',
'b.month','b.year','b.nb'])
->from('sheet as b')
->join('JOIN', 'fee as fc',
'b.id = fc.sheet_id')
->join('JOIN','person','fc.person_id = person.id')
->where(['b.id' => $id])
->andWhere(['not in', 'person_id', $subQuery2]);
$query = new Query();
$query->
select(['last_name','first_name','fc.tax','fi.returned','fc.submitted','fc.amount','fi.amount as iamount','fi.interest',
'b.month','b.year','b.nb'])
->from('sheet as b')
->join('RIGHT JOIN', 'fee as fc',
'b.id = fc.sheet_id')
->join('JOIN','person','fc.person_id = person.id')
->join('LEFT JOIN','loan as fi',
'b.id = fi.sheet_id and fc.person_id = fi.person_id')
->where(['b.id' => $id])
->union($query2) …
Run Code Online (Sandbox Code Playgroud) 我在Solaris上部署了Jboss 6.1,它运行正常.然后我做了一些FTP和Telnet,直接root登录被禁用.之后我得到了PermGen空间错误.
这个错误可能是什么原因?请帮忙.
错误:
12:21:30,873 ERROR [AbstractKernelController] Error installing to PostClassLoader: name=vfs:///usr05/ccapp/app/jboss-6.1.0/server/srs/deploy/SRSEar.ear state=ClassLoader mode=Manual requiredState=PostClassLoader: org.jboss.deployers.spi.DeploymentException: Error during deploy: vfs:///usr05/ccapp/app/jboss-6.1.0/server/srs/deploy/SRSEar.ear
at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:185) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1832) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1550) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1491) [:2.2.2.GA]
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:1983) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:1076) [:2.2.2.GA]
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:679) [:2.2.2.GA]
at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.process(MainDeployerPlugin.java:106) [:6.1.0.Final]
at org.jboss.profileservice.dependency.ProfileControllerContext$DelegateDeployer.process(ProfileControllerContext.java:143) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileDeployAction.deploy(ProfileDeployAction.java:151) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileDeployAction.installActionInternal(ProfileDeployAction.java:94) [:0.2.2] …
Run Code Online (Sandbox Code Playgroud)