小编Boh*_*ian的帖子

通过使用具体类而不是接口来减少编译的js的大小

我已经读过GWT,指定返回具体实现的方法,例如:

public ArrayList<String> getList();
Run Code Online (Sandbox Code Playgroud)

而不是通常首选的"抽象接口",例如:

public List<String> getList();
Run Code Online (Sandbox Code Playgroud)

结果在GWT产生编译JavaScript文件一个较小的,因为客户端(即JS)代码不必满足所有已知的接口的实现(在的例子中List,客户端代码必须能够处理LinkedList,ArrayList,Vector,等),因此它可以通过不编译未使用的实现来优化js.

我密切相关的问题是:

  • 这是真的?(以下问题假设真的)
  • 是使用接口还是每个应用程序的每类优化?即
  • 我是否只看到重构一个课程的好处?要么
  • 一旦所有客户端类都被重构为不使用接口,我才会看到一个好处吗?

size gwt class abstract

5
推荐指数
2
解决办法
167
查看次数

正则表达式歧义

关于正则表达式机制的基本问题:

我有以下表达式:[10]*1[10]*.

这会匹配100吗?

我的推理:
第一个选项:[10]*匹配“100”然后到达字符串的末尾=> 不匹配。
第二个选项:[10]*被忽略并且表达式匹配。

我忘记了一些小事,还是这实际上取决于正则表达式引擎?
(我记得关于贪婪与不贪婪的一些事情,但我不确定这是否适用于这种情况)

regex

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

使用Java正则表达式中的.find()迭代String

我正在尝试使用正则表达式解决来自codingbat.com的问题.

我是新手,所以一步一步的解释将不胜感激.我可以相对容易地使用String方法解决这个问题,但我正在尝试使用正则表达式.

这是提示:给定一个字符串和一个非空字符串,在字符串中每次出现单词之前和之后返回由每个char组成的字符串.忽略在单词之前或之后没有字符的情况,如果字符位于两个单词之间,则可以包括两次char.

wordEnds("abcXY123XYijk", "XY") ? "c13i"
wordEnds("XY123XY", "XY") ? "13"
wordEnds("XY1XY", "XY") ? "11"
Run Code Online (Sandbox Code Playgroud)

等等

我的代码到目前为止:

String regex = ".?" + word+ ".?";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

String newStr = "";
while(m.find())
    newStr += m.group().replace(word, "");

return newStr;
Run Code Online (Sandbox Code Playgroud)

问题是当一行中有多个单词实例时,程序会错过单词前面的字符,因为m.find()会超出它.

例如:wordEnds("abc1xyz1i1j", "1")应该返回"cxziij",但我的方法返回"cxzij",而不是重复"i"

我将非常感谢一个非混乱的解决方案,并且可以解释我可以应用于其他一般正则表达式问题.

java regex string

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

不需要的通用参数

假设需要使用特定的通用接口,但这种情况不需要使用其中一个通用参数.

假设我需要一个Callable<T>(必须T从其call()方法返回一个),但在这种情况下我不需要返回结果,我只想提交一些代码ExecutorService来"做某事"

什么是该类型的最佳选择T

java generics coding-style

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

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

使用localhost而不是gmail发送邮件

所以,我正在尝试通过javamail和glassfish发送电子邮件:这是我的代码(我在这里找到它http://www.javasrilankansupport.com/2012/05/send-email-in-java-mail-api -using-gmail.html)

private Session m_Session;
private Message m_simpleMessage;
private InternetAddress m_fromAddress;
private InternetAddress m_toAddress;
private Properties m_properties;
@Override
public void sendMail(String mail) throws Exception {
    try {

        m_properties     = new Properties();
        m_properties.put("mail.smtp.host", "smtp.gmail.com");
        m_properties.put("mail.smtp.socketFactory.port", "465");
        m_properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        m_properties.put("mail.smtp.auth", "true");
        m_properties.put("mail.smtp.port", "465");
        m_properties.put("mail.debug", "false");
        m_properties.put("mail.smtp.ssl.enable", "true");


        m_Session        =   Session.getDefaultInstance(m_properties,new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("user@gmail.com","password"); // username and the password
            }

        });

        m_simpleMessage  =   new MimeMessage(m_Session);

        m_fromAddress    =   new InternetAddress("user@gmail.com");
        m_toAddress      =   new InternetAddress(mail);


        m_simpleMessage.setFrom(m_fromAddress);
        m_simpleMessage.setRecipient(RecipientType.TO, m_toAddress); …
Run Code Online (Sandbox Code Playgroud)

java gmail smtp jakarta-mail glassfish-3

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

为什么抽象类"DocumentBuilderFactory"允许实例化新实例

最近,我一直在使用XML解析器.这只是我的开始,我设法了解如何在java中使用DOM解析器类,DocumentBuilderFactoryDocumentBuilder解析XML文档.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
DocumentBuilder db = dbf.newDocumentBuilder();            
Run Code Online (Sandbox Code Playgroud)

我问自己是怎么一个抽象类,如DocumentBuilderFactoryDocumentBuilder,被允许实例化新实例?然后在另一个例子中我看到:

Calendar calendar = Calendar.getInstance();  
System.out.println(calendar.get(Calendar.DATE)); 
Run Code Online (Sandbox Code Playgroud)
  1. 据我所知,你不能为抽象和接口类实例化(换句话说,创建一个对象).我对么?
  2. do getInstance()newInstancce()方法是否创建了上述抽象类的实例?

我是否遗漏了使用抽象类及其新对象的内容?

java oop abstract-class instantiation

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

正则表达式为有效的32位有符号整数

我很确定这个网站上还没有真正回答过.对于一劳永逸,最小的正则表达式匹配数字字符串,该字符串在32位有符号整数范围内-2147483648,范围为2147483647.

必须使用正则表达式进行验证 - 这是我唯一可用的选项.

我试过了

\d{1,10}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何将其限制在有效的数字范围内.


为了帮助开发正则表达式,它应该匹配:

-2147483648
-2099999999
-999999999
-1
0
1
999999999
2099999999
2147483647
Run Code Online (Sandbox Code Playgroud)

它不应该匹配:

-2147483649
-2200000000
-11111111111
2147483648
2200000000
11111111111
Run Code Online (Sandbox Code Playgroud)

我已经设置了一个在线实时演示(在rubular上),我的尝试和上面的测试用例.


注意:将接受有效的最短正则表达式.不考虑正则表达式的效率(除非有最短长度的平局).

regex validation integer

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

如何用一个空行替换多个空格和换行符

如何删除字符串中的多个空格和换行符,但为每组空行保留至少一个空行.

例如,更改:

"This      is



a        string.




Something."
Run Code Online (Sandbox Code Playgroud)

"This is

a string.

Something."
Run Code Online (Sandbox Code Playgroud)

我正在使用.trim()从字符串的开头和结尾去除空格,但我找不到任何用于删除字符串中的多个空格和换行符的内容.

我想只保留一个空格和一个换行符.

java string string-formatting

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

在构造函数中调用私有方法是一个好的设计吗?

说我有以下课程:

public class FormContainer {

    @EJB
    private ExternalDao externalDao; // uses dependency Injection

    private final OrderForm orderForm;

    private final List<OrderFormContent> formContents;

    public FormContainer(OrderForm orderForm) {
        this.orderForm = orderForm
        initializeOrderForm();
    }

    private void initializeOrderForm() {
        formContents = externalDao.getFormContents(orderForm);
        // similar for any other properties
    }

    // getters & setters
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这个类来保存我需要通过应用程序引用的所有字段.我仍在学习良好的设计和糟糕的设计实践,所以我想知道这个糟糕的设计是否初始化orderForm的属性.

如果是这样,怎么可以改进?

java constructor design-patterns initialization

5
推荐指数
2
解决办法
1484
查看次数