小编The*_*eLQ的帖子

使用Project Lombok是否安全?

如果您不知道Project Lombok可以帮助解决Java的一些烦恼,例如生成带注释的getter和setter,甚至像使用@Data生成简单的JavaBean.它可以真正帮助我,特别是在50个不同的事件对象中,你有多达7个不同的字段需要构建和使用getter隐藏.我可以删除近千行代码.

但是,我担心从长远来看,这将是一个令人遗憾的决定.##Java Freenode当我提到它时,Flamewars会在频道中爆发,提供代码片段会让可能的帮助者感到困惑,人们会抱怨缺少JavaDoc,而且未来的委托人可能会将其全部删除.我真的很喜欢积极的,但我担心的是消极的.

那么:在任何项目中使用Lombok都是安全的吗?积极影响是否值得消极?

java lombok

422
推荐指数
13
解决办法
12万
查看次数

Javadoc:package.html或package-info.java

在尝试创建包级别的Javadoc注释时,首选方法是什么?你是做什么?

package-info.java

  • 优点
    • 较新
  • 缺点
    • 滥用类 - 类是代码,不仅仅是注释

package.html的

  • 优点
    • HTML扩展意味着它不是代码
    • IDE /文本编辑器中的语法突出显示
  • 缺点
    • 没有?

对我来说,我一直使用Package.html.但我想知道它是否是正确的选择.

java javadoc

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

加载字体时,"RuntimeException:无法生成本机字体"

我试图在Android上使用自定义字体用于TextView,遵循此处的指南.使用相同的字体,相同的代码,相同的一切,我在adb logcat中得到这个:

W/dalvikvm(  317): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime(  317): FATAL EXCEPTION: main
E/AndroidRuntime(  317): java.lang.RuntimeException: Unable to start activity  ComponentInfo{org.evilx.quacklock/org.evilx.quacklock.MainActivity}:             java.lang.RuntimeException: native typeface cannot be made
E/AndroidRuntime(  317):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime(  317):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(  317):        at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(  317):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(  317):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  317):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  317):        at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(  317):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  317):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  317):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(  317):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(  317):        at …
Run Code Online (Sandbox Code Playgroud)

java android android-fonts runtimeexception

64
推荐指数
6
解决办法
2万
查看次数

使用依赖项的资源?

在我的Maven项目中,有一个模块(核心),它的类有一些资源.当在模块内部运行类时,它能够获得自己的资源.一切正常.

东西断裂的地方是依赖核心的另一个模块试图运行该类.Java正在寻找资源的文件夹是这个模块,而不是核心模块.所以课程失败了.

简而言之:如何访问依赖项的资源?


我试图通过在Core的JAR Manifest中声明来尝试这样做Class-Path: ..但是当列出可用的资源时JSHookLoader.class.getClassLoader().getResources("");(JSHookLoader在Core中,如果它意味着什么),我得到:

Resource: W:\programming\quackbot-hg\impl\target\classes
File rebel.xml

Resource: W:\programming\maven-repo\org\quackbot\core\3.5-SNAPSHOT
File core-3.5-SNAPSHOT.jar
File core-3.5-SNAPSHOT.pom
File maven-metadata-local.xml
File _maven.repositories
Run Code Online (Sandbox Code Playgroud)

这当然使事情复杂化,因为我期望JAR本身位于Classpath中,而不是JAR所在的目录

有什么建议?


回到这个项目,我仍然有这个问题.其他指南已经讨论过使用maven-assembly-plugin和远程资源插件,但这很麻烦,因为所有模块都必须包含怪物插件XML.

为什么我不简化问题:如何将依赖JAR添加到资源列表?

  1. core.jar在文件夹/ resources下有一些资源.运行core.jar我可以在资源列表中看到/ resources.
  2. impl.jar取决于core.jar.在运行它时/资源不在资源列表中,因此造成严重破坏.

这应该很简单,但我该怎么做呢?我花了好几个小时试图想出一个简单干净的方法去做,但无济于事.

java maven

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

隐藏静态创建方法背后的构造函数?

我最近发现了一种在Google GuavaProject Lombok中创建对象的新实例的有趣方法:隐藏静态创建方法背后的构造函数.这意味着new HashBiMap()你可以做而不是做HashBiMap.create().

我的问题是为什么?隐藏构造函数有什么好处?对我来说,我认为这样做绝对没有优势,它似乎打破了基本的对象创建原则.因为开始创建一个对象new Object(),而不是一些Object.createMe()方法.这几乎就像为创建方法创建一个方法.

你这样做会得到什么?

java

19
推荐指数
3
解决办法
8626
查看次数

在Java 1.7上编译Java 1.5仍然有效吗?

我最近在我的一个项目中转向了Java 7.我声称它可以在Java 1.5上运行,因为我在Java 6或7中没有依赖它.但是在今天编译时我注意到了这一点:

bootstrap class path not set in conjunction with -source 1.5
Run Code Online (Sandbox Code Playgroud)

谷歌发现这个警告的信息很少.这是否意味着您无法从Java 1.7编译为Java 1.5?

java java-5 java-7

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

无法让@Component在Spring中继承?

在我的项目中,有一个所有客户端类都扩展的公共基类.这有一个@Autowired字段,需要由Hibernate注入.这些都在另一个具有@Autowired基类集合的类中组合在一起.

为了减少客户端代码的样板,我试图让@Component继承.由于@Component默认情况下不这样做(显然它曾经用过),我创建了这个变通方法注释

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
@Inherited
public @interface InheritedComponent {
}
Run Code Online (Sandbox Code Playgroud)

...并用它注释基类.它不漂亮但我希望它会起作用.不幸的是它没有,这真让我感到困惑,因为@Inherited应该让它发挥作用

有没有其他方法可以继承@Component?或者我只是要说任何扩展基类的类都需要这个样板?

java spring annotations

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

Java Beans作为数据存储类设计不好吗?

通常JavaPractices.com是一个好主意的好网站,但这个让我烦恼:JavaBeans很糟糕.

本文引用了几个原因,主要是JavaBean这个术语的意思是"Java Bean是一个可重用的软件组件,可以在构建器工具中以可视方式进行操作".不是数据存储,违反了某些模式,而且更复杂.

现在我同意最后一个,但在我看来,列表中的JavaBeans比嵌套的地图更有意义.文章声称数据库映射框架应该调用构造函数,而不是set*方法,并且对象应该是不可变的.但是在我看来,在尝试构建对象时调用set*方法比阅读更容易new MappedObject("column1", "column2", "yet another column", "this is stupid");

除了数据库映射之外,我还使用JavaBean样式类进行其他操作,例如对于IRC bot,每个用户都有一个对象,可以使用各种内容进行更新.每次给出新信息时我都不想创建新对象,我想将其添加到现有对象中.

所以我的问题是:使用JavaBeans进行数据存储是一种不好的做法,应该避免,还是非常安全?

java javabeans

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

Maven站点(Maven 3)生成空站点文件夹

我正在尝试使用maven网站插件创建一个基本的maven网站.所以我把它添加到我的pom:

<reporting>
    <plugins>
        <!--JavaDoc setup-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <defaultAuthor>Leon Blakey</defaultAuthor>
                <defaultVersion>${project.version}</defaultVersion>
                <links>
                    <link>http://download.oracle.com/javase/6/docs/api</link>
                </links>
            </configuration>
        </plugin>
    </plugins>
</reporting>
Run Code Online (Sandbox Code Playgroud)

跑了 mvn site --errors

[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building pircbotx 1.3-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-site-plugin:2.0.1:site (default-site) @ pircbotx ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.688s
[INFO] Finished at: Wed Jan 12 18:08:00 EST 2011
[INFO] Final Memory: 5M/13M
[INFO] ------------------------------------------------------------------------
W:\programming\pircbot-hg>
Run Code Online (Sandbox Code Playgroud)

嗯,奇怪的是没有输出.所以当我检查目标/网站时,它是空的.唯一的文件夹是images /,css …

java javadoc maven maven-javadoc-plugin maven-site-plugin

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

不能包含不同参数的相同界面?

请考虑以下示例:

public class Sandbox {
    public interface Listener<T extends JComponent> {
        public void onEvent(T event);
    }

    public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
    }
}
Run Code Online (Sandbox Code Playgroud)

这失败,出现以下错误

/media/PQ-WDFILES/programming/Sandbox/src/Sandbox.java:20: Sandbox.Listener cannot be inherited with different arguments: <javax.swing.JPanel> and <javax.swing.JLabel>
        public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
               ^
1 error
Run Code Online (Sandbox Code Playgroud)

为什么呢?生成的方法没有重叠.事实上,这基本上意味着

public interface AnotherInterface {
    public void onEvent(JPanel event);
    public void onEvent(JLabel event);
}
Run Code Online (Sandbox Code Playgroud)

那里没有重叠.那为什么失败了呢?


万一你想知道我在做什么,并有一个更好的解决方案:我有一堆事件和一个监听器接口,几乎完全像Listener上面的类.我想创建一个适配器和一个适配器接口,为此我需要使用特定事件扩展所有Listener接口.这可能吗?有一个更好的方法吗?

java generics

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