如何获得泛型类型的"真实"类?
例如:
public class MyClass<T> {
public void method(){
//something
System.out.println(T.class) //causes a compile error, I wont the class name
//something
}
}
Run Code Online (Sandbox Code Playgroud)
如果T =整数
输出:
java.lang.Integer
Run Code Online (Sandbox Code Playgroud)
如果T = String
输出:
java.lang.String
Run Code Online (Sandbox Code Playgroud)
谢谢
我是Play 2 Framework v.2.1.1中的新用Java和我正在寻找最好的方法来执行以下操作而不重复代码.
为了简化,我有一个使用外部API的Play 2后台.我不管理这个API,但我调用REST服务来执行api上的操作.
此API的对象与Play 2模型对象完全相同.但我不想复制api对象来添加Play验证和其他注释.
有没有办法使用配置文件添加此类行为?我正在考虑像Hibernate hbm这样的东西.
例如:
非托管api中的对象:(为简单起见,我省略了getter和setter)
public class Entity{
public String field1;
public String field2;
}
Run Code Online (Sandbox Code Playgroud)
我想避免的对象:(为简单起见,我省略了getter和setter)
public class Entity1{
@Required
@NonEmpty
@MinLength(3)
public String field1;
@Required
@NonEmpty
public String field2;
}
Run Code Online (Sandbox Code Playgroud)
配置示例:(我需要这样的东西)
<class name="Entity1">
<property name="field1" >
<required/>
<nonEmpty/>
<minLength value="3"/>
</property>
<property name="field2" >
<required/>
<nonEmpty/>
</property>
</class>
Run Code Online (Sandbox Code Playgroud)
使用注释似乎比使用xmls或任何其他配置文件更好,所以我不一定要使用配置文件,我愿意接受任何解决此问题的建议.
谢谢
在Vaadin 7中有一个addValidator函数,但在Vaadin 8中它不存在.
Vaadin 7示例:
TextField user = new TextField("User:");
user.setRequired(true);
user.setInputPrompt("Your username");
user.addValidator(new NullValidator("Username can't be empty", false));
user.setInvalidAllowed(false);
Run Code Online (Sandbox Code Playgroud) 我有一个战争人工制品,我需要从罐子里使用他们的一些类.我无法将类移动到另一个项目,然后使用以下配置将我的webapp中包含的类和资源部署为"附加"工件:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<attachClasses>true</attachClasses>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这将导致部署两个工件:mywebapp-1.0-SNAPSHOT.war和mywebapp-1.0-SNAPSHOT-classes.jar.
要使用这些类,我将引用工件,如下所示:
<dependency>
<groupId>mygroup</groupId>
<artifactId>mywebapp</artifactId>
<version>${project.version}</version>
<classifier>classes</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我从Jenkins编译时一切正常,但是当我从Eclipse本地运行测试时找不到引用类.(java.lang.NoClassDefFoundError)
我认为它可能是maven eclipse插件中的一个错误,有人有任何想法可以发生吗?
我的Java JMS有一个不稳定的问题。暂时可以正常工作,但是会异常地引发以下异常并削减执行力。
重要的是要注意,这种情况不会停止经纪人。
javax.jms.JMSException: Peer (vm://test#1) disposed.
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
at org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1773)
at org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1790)
at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:99)
at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:114)
at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:99)
at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:203)
at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.activemq.transport.TransportDisposedIOException: Peer (vm://test#1) disposed.
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用readManyAsync从RingBuffer中读取N个项目,但它总是返回一个空的resultSet.如果我使用readOne,我会得到数据.
我正在使用readManyAsync作为文档指定.还有另一种方法吗?
环境:
例:
Ringbuffer<String> buffer = this.hazelcastInstance.getRingbuffer("testBuffer");
buffer.add("a");
buffer.add("b");
buffer.add("c");
Long sequence = buffer.headSequence();
ICompletableFuture<ReadResultSet<String>> resultSetFuture = buffer.readManyAsync(sequence, 0, 3, null);
ReadResultSet<String> resultSet = resultSetFuture.get();
System.out.println("*** readManyAsync *** readCount: " + resultSet.readCount());
int count = 0;
for (String s : resultSet) {
System.out.println(count + " - " + s);
count++;
}
System.out.println("*** readOne ***");
for (int i = 0; i < 3; i++) {
System.out.println(i + " - " + buffer.readOne(i));
}
Run Code Online (Sandbox Code Playgroud)
输出:
*** readManyAsync …Run Code Online (Sandbox Code Playgroud) 我有一个Java对象列表,我需要减少它应用聚合函数,如通过数据库选择.
注意:数据是从多个数据库和服务调用计算的.我希望有数千行,每行总是会有相同数量的"单元格".此数量在执行之间变化.
样品:
假设我的数据List以Object[3](List<Object[]>)表示,我的数据可能是:
[{"A", "X", 1},
{"A", "Y", 5},
{"B", "X", 1},
{"B", "X", 2}]
Run Code Online (Sandbox Code Playgroud)
样本1:
SUM索引2,按索引0和1分组
[{"A", "X", 1},
{"A", "Y", 5},
{"B", "X", 3}]
Run Code Online (Sandbox Code Playgroud)
样本2:
MAX超过索引2,按索引0分组
[{"A", "Y", 5},
{"B", "X", 2}]
Run Code Online (Sandbox Code Playgroud)
有人知道一些可以在Java中模拟这种行为的框架或api吗?
我的第一个选择是在NO-SQL数据库(如Couchbase)中插入所有数据,然后应用Map-Reduce,最后得到结果.但是这个解决方案有很大的开销.
我的第二个选择是嵌入一个Groovy脚本,但它也有很大的开销.
我有一个Couchbase(v 2.0.1)群集,其中包含以下规范:
目前我在这个桶中有201.000.000个文件,只有200GB的磁盘在使用中.
我每分钟都会收到以下警告:
Metadata overhead warning. Over 51% of RAM allocated to bucket "my-bucket" on node "my-node" is taken up by keys and metadata.
Run Code Online (Sandbox Code Playgroud)
Couchbase文档说明了以下内容:
表示存储桶现在使用超过50%的已分配RAM来存储元数据和密钥,从而减少了可用于数据值的RAM量.
我知道这可能是一个有用的指标,我可能需要将节点添加到我的集群,但我认为这应该是不必要的,因为桶的可用资源量.
一般桶分析:

我怎么知道是什么产生了如此多的元数据?
有没有办法配置公差百分比?
我正在使用的: Ubuntu 12上的最新MySQL.
设置:假设我有一个表"EmployeePayment",每个员工都有"姓名"和"小时".假设我已经填充了值.
问题: 当我使用命令时
select * from EmployeePayment where Name in ('');
Run Code Online (Sandbox Code Playgroud)
正如我所料,我得到了空集.但是,当我使用时
select * from EmployeePayment where Name in ('' or '');
Run Code Online (Sandbox Code Playgroud)
我得到了整个表格.而且,如果我挑剔并投入命令
select Name, SUM(Hours) from EmployeePayment where Name in ('' or '');
Run Code Online (Sandbox Code Playgroud)
然后它只返回表中的顶级名称.这个"in"命令发生了什么?