小编Buh*_*ndi的帖子

如何在运行时获取泛型类型?

这是我的代码:ExecutorImp扩展了AbstractExecutor,它提取了与其实现者相同的执行逻辑(ExecutorImp就是一例),当调用ExecutorImp的execute()方法时,它将调用其超类型中的方法,但是超类型(AbstractExcutor) )应该知道另一个绑定到实现者的类(在示例中,它是User类):

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;

abstract class AbstractExecutor<E> {
    public void execute() throws Exception {
        ArrayList<E> list = new ArrayList<E>();
        // here I want to get the real type of 'E'
        Class cl = this.getClass().getTypeParameters()[0].getGenericDeclaration().getClass();
        Object o = cl.getConstructor(String.class).newInstance("Gate");
        list.add((E) o);
        System.out.println(format(list));
    }
    public abstract String format(ArrayList<E> list);
    public abstract String getType();
}

public class ExectorImp<E> extends AbstractExecutor<User> {
    @Override
    public String getType() {
        return "user";
    }
    @Override
    public String format(ArrayList<User> list) {
        StringBuffer sb = new StringBuffer();
        for …
Run Code Online (Sandbox Code Playgroud)

java generics reflection

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

.class和.dex文件有什么区别?

当然,.dex文件适用于Android的Dalvik VM,.class文件适用于JVM.但我想知道他们是否有类似的布局(常量池,字段,方法,属性......)?字节码是不同的,但Dalvik特定的操作码是否与JVM中的操作码等效?

java android jvm dalvik

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

从Java中的Element中检索命名空间(使用DOM)

我有以下XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
    xmlns:custom="http://example.com/opensearchextensions/1.0/">
    <ShortName>Test</ShortName>
    <Description>Testing....</Description>
    <Url template="whatever" type="what" />
    <Query custom:color="blue" role="example" />
</OpenSearchDescription>
Run Code Online (Sandbox Code Playgroud)

我关心的是Query元素.它有一个Namespace属性,在java中,你需要一个namespaceURI来检索值.

我的问题是:如何从根元素(在本例中为OpenSearchDescription元素)中检索命名空间列表?我想要我可以用来请求的属性,前缀和名称空间URI Query.

谢谢.

PS:我在java中使用DOM,在Java SE中使用标准.如果有可能的话,我愿意转向XPath.要求是只需要使用Java Standard API.

java xpath dom

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

如何在hibernate/JPA中禁用自动更新

是否可以阻止hibernate自动更新持久对象?

    @Transactional
    public ResultTO updateRecord(RequestTO requestTO) {

        Entity entity = dao.getEntityById(requestTO.getId());

         // now update the entity based on the data in the requestTO

         ValidationResult validationResult = runValidation(entity);

         if(validationResult.hasErrors()) {
            // return ResultTO with validation errors
         } else {
             dao.persist(entity);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是代码中发生的事情,我检索hibernate将被认为处于持久状态的实体,然后我更新实体中的一些字段,然后将实体传递给验证.如果验证失败,则不要udpate,如果验证成功,则持久化实体.

这是这个流程的主要问题:因为我更新了它在验证中使用的实体,无论我是否调用persist()方法(在DAO上)都没关系,因为hibernate将永远更新记录检测到实体已被更改并标记它以进行更新.

请记住,我可以改变验证的方式并解决问题,所以我对解决方法不感兴趣.我很想知道如何能够自动更新持久对象的hibernate功能.

请记住我正在使用hibernates的JPA实现.所以Hibernate处理hibernate特定API的具体答案对我来说不起作用.

我试图寻找hibernate配置,看看我是否可以设置任何配置来阻止这种行为,但没有运气.

谢谢

--EDIT ---我找不到解决方案,所以我选择回滚事务而不抛出任何RuntimeException,即使我在声明事务中使用:

TransactionInterceptor.currentTransactionStatus()使用setRollbackOnly();

这就像一个魅力.

java orm hibernate jpa

10
推荐指数
2
解决办法
9887
查看次数

为什么Java EE中的EJB3 CMT没有@TransactionTimeout注释

对于EJB3中的容器管理事务(CMT),我们为事务管理提供了以下EJB注释.

  • @TransactionAttribute
  • @TransactionManagement

不幸的是,没有办法设置事务超时,它是特定于每个容器的.这意味着我将不得不"管理"我使用的每个特定Java EE EJB容器的事务超时.

例如,在Wildfly 9.x及更高版本中,有一个org.jboss.ejb3.annotation.TransactionTimeout我可以使用的注释.或者,我可以在JBoss EJB3部署描述符中配置它.这不适用于Wildfly以外的容器.

  • 有没有办法在任何 Java EE认证的容器上运行CMT容器管理的事务超时?
  • 我在哪里可以找到默认的事务超时配置值,特别是在Wildfly 9.x中?

transactions java-ee ejb-3.1 wildfly

10
推荐指数
0
解决办法
4689
查看次数

获取用Java或Groovy填充的有效oauth_signature的绝对最小代码?

所以我正在测试Rest OAuth实现.我的测试工具将发送HTTP请求,但我需要准备Authorization标头.

我需要的是:我想要一个有效的授权标题

我拥有:除了oauth_signature之外的所有标题我还有2个秘密,即token_secret和consumer_secret.我也拥有access_token.所以它真的归结为,不得不签署这个请求.我怎么做?

简介:我只需要为RESTful服务填充Authorization标头的oauth_signature部分.我该怎么做?

基本上:

oAuthHeader="OAuth";
oAuthHeader=oAuthHeader+" oauth_signature_method="+oauth_signature_method;
oAuthHeader=oAuthHeader+",oauth_version="+oauth_version;
oAuthHeader=oAuthHeader+",oauth_nonce="+oauth_nonce;
oAuthHeader=oAuthHeader+",oauth_timestamp="+oauth_timestamp;
oAuthHeader=oAuthHeader+",oauth_consumer_key="+oauth_consumer_key;
oAuthHeader=oAuthHeader+",oauth_token="+oauth_token;
oAuthHeader=oAuthHeader+",oauth_signature="+**oauth_signature**;

Authorization = oAuthHeader;
Run Code Online (Sandbox Code Playgroud)

我的问题是我没有oauth_signature部分.我不知道如何得到它.请帮忙?

java groovy oauth signature jar-signing

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

Bean Validation在JSF 2中的resourcebundle参数化可能性?

在JSF 2中使用带有BV的resourcebundle看起来像这样:

public class UserBean {
    @Size(min=13, message="{creditcard.length}")
    public String getCreditCard() {
        return this.creditCard;
    }
}
Run Code Online (Sandbox Code Playgroud)

我必须在其中一个属性文件中定义ResourceBundle条目,该文件可以在 faces-config.xml

creditcard.length =信用卡长度必须至少为13个字符

我们可以看到creditcard.length的值是非参数化的.

我可以进行参数化的ResourceBundle条目,可以从BV或其他地方填充吗?


这是我想要实现的简单方案:

creditcard.length =信用卡长度必须至少为{0}个字符.感谢您选择{1}信用卡.

而我希望这样的事情:

public class UserBean {
    @Size(
        min=13, 
        message="{creditcard.length}", 
        messageParams={"13", "plantvszombie"})
    public String getCreditCard() {
        return this.creditCard;
    }
}
Run Code Online (Sandbox Code Playgroud)

当验证失败时,creditcard属性的错误消息将显示如下字符串:

信用卡长度必须至少为13个字符.感谢您选择plantvszombie信用卡.


这个ResourceBundle消息参数化是否可行?

请分享您对此事的经验.

谢谢 !

java jsf resourcebundle bean-validation jsf-2

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

ArrayList效率和大小

我想要明确一些事情:当使用arraylist时,它以10个元素的大小开始.如果需要自动增加,它会将整个arrayList重写为2/3更大.

如果我正在查看最终大小为50-120的列表,那么更好的是:

  1. 立即创建它大小150并且有很多未使用的空间
  2. 允许列表自动增加几次?

谢谢

java arraylist

9
推荐指数
2
解决办法
5042
查看次数

检查int变量是null还是从数据库中为空

我有一个变量是:

nocustomers = rs.getInt("CUST_TRAN_COUNT");
Run Code Online (Sandbox Code Playgroud)

如果它为null,我想执行.

我试过了

if (nocustomers ==null)
Run Code Online (Sandbox Code Playgroud)

它显示错误.

我该如何解决这个问题?


我的新修改代码是:

try{

    query=" select * from SS_summary where txn_date = to_date ('"+asatdate+"','YYYY-MM-DD') ";
    st = conn.createStatement();
    rs = st.executeQuery(query);

    if (rs.next())
    {   


    nocustomers = rs.getInt("CUST_TRAN_COUNT");

    nocheques =rs.getInt("CHEQ_DELIVERED_MAIN");
    }

    if (rs.wasNull()) {
        out.println("NO DATA FOUND");
        }

%>
Run Code Online (Sandbox Code Playgroud)

java jdbc

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

HttpGet会自动处理cookie吗?

我想在使用HttpGet连接到服务器时保留会话,我需要了解它如何处理cookie.

服务器开发人员说他自己处理所有cookie.我使用HttpGet请求访问服务器如下:InputStream isResponse = null;

    HttpGet httpget = new HttpGet(strUrl);
    HttpResponse response = mClient.execute(httpget);

    HttpEntity entity = response.getEntity();
    isResponse = entity.getContent();
    responseBody = convertStreamToString(isResponse);

    return responseBody;
Run Code Online (Sandbox Code Playgroud)
  1. 我应该做点什么吗?他是否自动将cookie放在我的设备上,并且HttpGet方法知道使用它以便使用cookie保持sessionID?

  2. 如何检查我的设备上是否存在cookie,以便知道会话是否"活着"?

  3. 如果我使用以下代码来获取cookie:

    CookieStore cookieStore = new BasicCookieStore();
    
    // Create local HTTP context
    HttpContext localContext = new BasicHttpContext();
    // Bind custom cookie store to the local context
    localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    
    HttpGet httpget = new HttpGet(strUrl);
    HttpResponse response = mClient.execute(httpget,localContext);
    
    Run Code Online (Sandbox Code Playgroud)

HttpGet是否仍像以前一样处理cookie?

  1. 我看到DefaultHttpClient(上面代码中的mClient)有自己的CookieStore.如何保存Cookie并在下次创建时加载它们?

java cookies android http httpclient

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