是否可以实例化在抽象类中作为泛型类型参数提供的类?
例:
public MyClass {
public MyClass(String test) {
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在另一个抽象类中实例化这个类?
public abstract class AbstractClass<T extends MyClass> {
public AbstractClass() {
T t = new T("test"); //Cannot instantiate the type T
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个自定义项目阅读器,可将行从文本文件转换为我的实体:
public class EntityItemReader extends AbstractItemStreamItemReader<MyEntity> {
@Override
public MyEntity read() {
String line = delegate.read();
//analyze line and skip by condition
//line.split
//create entity with line values
}
}
Run Code Online (Sandbox Code Playgroud)
这类似于FlatFileItemReader。
然后,读取的内容MyEntity将由保留到数据库JdbcItemReader。
问题:有时我的行包含应跳过的值。
但是,当我只是return null在read()阅读器的方法内部时,不仅会跳过此项目,而且会完全终止阅读,并且将跳过所有其他行。因为null元素是所有弹簧读取器的“信号”,所以要读取的文件已完成。
因此:如果无法返回null,我该怎么做才能按条件跳过阅读器中的特定行?因为根据读者的本性,我被迫在此处返回一个对象。
根据我的要求,可能已经有某种apache或guava实用程序类了:
我想始终创建相同长度的字符串.丢失的字符应该用固定字符向左或向右填充.就像是:
Utils.filledString(teststring, " ", 5); //would ensure the teststring is always 5 chars long, and if not append whitespace to the right
Utils.filledString(teststring, "x", -5); //same as above, but fill the 5 chars left with an x
Run Code Online (Sandbox Code Playgroud)
你明白了,可能它已经存在,但我找不到正确的关键字来找到它.
我想将folling的SQL语句重写为动态PreparedStatementjava:
UPDATE table SET field='C' WHERE id=3;
INSERT INTO table (id, field)
SELECT 3, 'C'
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
Run Code Online (Sandbox Code Playgroud)
特别是我不知道如何将SELECT 3, 'C'行重写为动态语句.
UPDATE table SET name=:name WHERE id=:id
INSERT INTO table (id, name)
SELECT 3, 'C' <-- how could I rewrite these values to take the dynamic values from PreparedStatement?
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
Run Code Online (Sandbox Code Playgroud)
我的对象,类似:
@Entity
public class MyEntity {
long id, String name;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用beanio解析固定长度的内容(单个字符串行).我想使用基于注释的配置,但它不起作用.
以下代码可能有什么问题?
StreamBuilder builder = new StreamBuilder("s1").addRecord(MyRecord.class);
StreamFactory factory = StreamFactory.newInstance();
factory.define(builder);
Unmarshaller unmarshaller = factory.createUnmarshaller("s1");
unmarshaller.unmarshal("123ASD");
@Record(minOccurs = 1, maxOccurs = 1)
public class MyRecord {
@Field(at = 1, length = 3, minOccurs = 1)
private String number;
@Field(at = 4, length = 3, minOccurs = 1)
private String text;
}
org.beanio.InvalidRecordException: Invalid 'myRecord' record
==> Invalid 'number': Expected minimum 1 occurrences
==> Invalid 'text': Expected minimum 1 occurrences
at org.beanio.internal.parser.UnmarshallingContext.validate(UnmarshallingContext.java:200)
at org.beanio.internal.parser.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:204)
at org.beanio.internal.parser.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:89)
Run Code Online (Sandbox Code Playgroud) Math.abs()将任何数字转换为正数.还有一个函数(我可能会丢失)支持相反的方式:将任何数字(无论符号)转换为负数?
我唯一能想到的是:
Math.abs(number) * -1
Boolean isValid = true;
String message = "prefix" + isValid != null ? " midfix " : "suffix";
System.out.println(message);
Run Code Online (Sandbox Code Playgroud)
您认为这是什么结果?我期待prefix midfix.但实际上结果是:midfix!
这是java库本身的错误(1.7)吗?我应该为此报告错误吗?或者这是否按预期工作,我在滥用它?
可以使用以下方法"修复":
String message = "prefix" + (isValid != null ? " midfix " : "suffix");
但无论如何不应该没有这个问题?
从现有列表中提取结果集的公共代码可以如下:
List<Node> results;
for (Node node : rsp.getNodes()) {
if (node.isValid() && node.getType == NodeType.TEST &&...) {
if (results == null) {
results = new ArrayList<>();
}
results.add(node);
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用java 8和lambdas,因为建议总是使用流来支持?
rsp.getNodes().stream.filter(node -> {
return node.isValid() && node.getType == NodeType.TEST &&...;
}).forEach(node -> results.add(node));
Run Code Online (Sandbox Code Playgroud)
对我来说,最近从java8开始,这看起来并不比现在的java7代码更清晰.无论如何你有更多的经验,并且可以肯定地推荐我使用这些类型的"快捷方式"与lambdas,而不是旧的foreach风格?
我知道最后它可能是一个品味问题.如果是的话,你会觉得我的例子是一个完全可行的情况下,可以始终与流和lambda表达式作为一个很好的做法(我有意识地不使用术语"最佳实践")所取代?
我正在尝试创建一个显示检索数据的基本网页http://rest-service.guides.spring.io/greeting.
json输出是:
{"id":2273,"content":"Hello, World!"}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下html页面:
<body ng-app="hello">
<div class="container">
<h1>Greeting</h1>
<div ng-controller="home" ng-cloak class="ng-cloak">
<p>The Id is: {{greeting.id}}</p>
<p>The content is: {{greeting.content}}</p>
</div>
</div>
<script src="js/angular-bootstrap.js" type="text/javascript"></script>
<script src="js/hello.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
和hello.js:
var myApp = angular.module('hello', []);
myApp.controller('home', ['$scope', function($scope) {
$scope.greeting = {};
$http.get('http://rest-service.guides.spring.io/greeting')
.success(function(data, status, headers, config) {
$scope.greeting = data;
});
}]);
Run Code Online (Sandbox Code Playgroud)
结果:占位符greeting.id/content未解析.这可能有什么问题?
我想实现以下(不起作用):
<div ng-repeat="product in products">{{product.headline}}</div>
<div>{{product.text}}</div>
Run Code Online (Sandbox Code Playgroud)
我只是首先看到所有标题,然后是彼此之下的所有文本.如何在额外的div元素上再次引用产品?
java ×8
angularjs ×2
bean-io ×1
generics ×1
java-8 ×1
java-stream ×1
javascript ×1
jdbc ×1
json ×1
lambda ×1
postgresql ×1
rest ×1
spring ×1
spring-batch ×1
sql ×1
string ×1