在阅读关于泛型的Java官方教程时,我发现你可以限制类型参数(在本例中是T)用'and'运算符(&)扩展类和/或更多接口,如下所示:
<T extends MyClass & Serializable>
Run Code Online (Sandbox Code Playgroud)
我替换了&with ,(错误地仍然有效,并带有一个小警告).
我的问题是,这两者之间有什么区别:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
Run Code Online (Sandbox Code Playgroud)
和示例方法:
static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
ArrayList<T> arr = new ArrayList<T>();
for (T o : a) {
arr.add(o); // Correct
}
return arr;
}
Run Code Online (Sandbox Code Playgroud) 它们是一样的吗?刚看完Rob Connery的店面教程,他们似乎是类似的技术.我的意思是,当我实现一个DAL对象时,我有GetStuff,Add/Delete等方法,我总是首先编写接口,这样我以后就可以切换db了.
我混淆了什么吗?
我检查了MDN,看看有什么方法可以获得margin属性的自动值,它说:"auto被替换为一些合适的值,例如它可以用于块的居中."
但是什么是合适的价值,适合什么?
我尝试了一些实验,我看到如果我添加margin-left:auto,容器会向右移动(就像浮动到右边):
#container {
background: red;
width: 120px;
margin-left: auto;
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着添加保证金自动实际上就像"占用所有可用空间"?当你添加左右边距时,它会使div居中,因为它试图从左边和右边占据所有空间?
我在Play中使用JPA如何存储HashMap将近一周.存储所有其他属性,只有HashMap具有零元素(为空).
public class ImageModel extends Model {
@Id
private String id;
private String url;
@ElementCollection(targetClass = java.lang.String.class)
@MapKeyClass(java.lang.String.class)
private Map<String,String> tags = new HashMap<>();
// the method for adding keys and values to the HashMap
public void add(String key, String value){
tags.put(key,value);
this.save();
}
}
Run Code Online (Sandbox Code Playgroud)
我还尝试用以下内容进行注释:
@ElementCollection(fetch=FetchType.LAZY)
Run Code Online (Sandbox Code Playgroud)
所以,我现在唯一的猜测是我没有配置好Play.(我必须说我正在使用Play2并且没有配置任何东西,除了在数据库设置前删除"#"(注释标记)).
On Play文档说:" Play 2.0中没有内置的JPA实现 ".可能是这样吗?
更新:我做了一些研究并说可能是因为我正在使用Play-H2的默认数据库.我尝试使用MySQL - 视频如何做到这一点,但它再次只保存了id和url.我查看了MySQL数据库和表,该类的名称只有2个属性(id和url),没有我的HashMap的痕迹.
Update2:添加了一个打印屏幕 - 带有数据库查询.
Update3:Play中的示例"computer-database-jpa"工作正常,因此JPA应该没问题,但该示例没有使用Map(HashMap).我甚至用EclipseLink改变了hibernate,但仍然没有工作.:(虽然,所有基本类型属性都在数据库中)
我在互联网上看到很多使用网络套接字和RabbitMQ(https://github.com/videlalvaro/rabbitmq-chat)聊天的例子,但我不明白为什么它需要一个聊天应用程序的消息队列.
为什么不能通过Web套接字将消息从浏览器发送到服务器,然后服务器使用广播方法再次使用Web套接字将该消息广播到其余的活动浏览器?(也许我错过了什么)
伪代码示例(使用socket.io):
// client (browser)
socket.emit("message","my great message that will be received by all"
// server (any server can be, but let's just say that it is also written in JavaScript
socket.on("message", function(msg) {
socket.broadcast.emit(data);
});
// the rest of the browsers
socket.on("message", function(msg) {
// display on the screen the message
});
Run Code Online (Sandbox Code Playgroud) 那么为什么 React 调用会在这种情况下渲染:
class MyComponent extends React.Component {
constructor(props) {
this.state = {
user: { name: 'john' },
};
}
render() {
return (
<div>
Name: {this.state.user.name}
<button onClick={() => {
const user = this.state.user;
user.name = 'Michael';
// this works, also this.setState({}) with empty json works too
this.setState({ user });
}}> Change name </button>
</div>);
}
Run Code Online (Sandbox Code Playgroud)
我所期望的是 React 不会检测到任何更改,并且为了使上述代码能够复制用户对象,以便 React 检测到更改,如下所示:
const user = {...this.state.user}; // a new copy of object, so new refference
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我想使用react-virtualized呈现项目列表,但是有些项目可能会改变大小.
我添加了一个演示,其中每个项目都有一个按钮,当有人点击按钮时,项目需要展开并推送下面的项目:https: //plnkr.co/edit/GG2bSIC5M1Gj7BR1pOii
用例类似于facebook帖子,当有人评论它会扩展帖子并推动其他帖子更低.
ReactDOM.render(
<List
className='List'
autoHeight
width={300}
height={400}
rowCount={list.length}
rowHeight={30}
rowRenderer={
({ index, isScrolling, key, style }) => (
<div
className='Row'
key={key}
style={style}
>
{list[index]}
<Expander /> /* contains the button, which when click it will expand more text*/
</div>
)
}
/>,
document.getElementById('example')
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
UPDATE
我意识到必须有一种方法来强制List更新项目并重新计算位置.有一个例子InfiniteLoader(反应虚拟化示例),它registerChild在List中用作ref.似乎当InfiniteLoader从服务器收到答案时,它能够强制列表重新呈现行.
我已尝试使用forceUpdate列表中的另一个示例,但List仍未更新.
我有一个简单的html页面和一个js脚本:HTML页面:
<body>
<input type="text" id = "content">
<button type="button" id="btn"> Save </button>
</body>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
$(document).ready( function(){
var cook = $.cookie('theName', { path: '/'});
if ( cook )
alert(cook);
$('#btn').click(function(){
var theName = $('#content').val();
alert(v.val());
$.cookie('theName', theName, { path: '/', expires: 7 });
alert("Cookie done");
});
});
Run Code Online (Sandbox Code Playgroud)
图书馆:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"> </script>
<script type="text/javascript" src = "https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js"> </script>
Run Code Online (Sandbox Code Playgroud)
它应该保存我的名字,当我点击刷新以显示我的名字.唯一的问题是当我尝试读取cookie时,而不是名称显示%5Bobject%20Object%5D.
谢谢.
我递归地使用这种类型:
data Expr = Add Expr Expr | Num Int
add (Add (Num a) (Num b)) = a + b
Run Code Online (Sandbox Code Playgroud)
对于add Add ((Num 1) (Num 2))作品,但我如何为所有递归类型做,如:
add Add( (Add (Num 1) (Num 2)) (Num 3) ) ?
Run Code Online (Sandbox Code Playgroud) 我有一个功能,返回我IO (Map.Map String Double),我需要Map.Map String Double,没有IO.
我试图这样做,但它失败了:不在范围内:数据构造函数`IO'.
extractIO (IO (a)) = a
Run Code Online (Sandbox Code Playgroud) 我在Windows机器上有一个.NET应用程序,在Linux(CentOS)服务器上有一个Cassandra数据库.Windows机器有时可能在几秒钟内发生,当发生这种情况时,删除或更新查询不会生效.
Cassandra是否要求所有服务器都具有相同的时间?Cassandra驱动程序是否使用时间戳发送我的查询?(我只是编写简单的删除或更新查询,没有时间戳或TTL).
更新:我使用Datastax C#驱动程序
我有3个项目:基础,中间和客户.客户端访问基础项目通过中间一个.我在这里简化了我的问题.我有3个项目的解决方案:
// Animals project
public class FarmAnimal
{
public string GetFood { get; protected set; }
}
public class Cow : FarmAnimal
{
public Cow()
{
GetFood = "Milk";
}
}
public class Chicken : FarmAnimal
{
public Chicken()
{
GetFood = "Egg";
}
}
// Farmer project
public class AbstractFarmer<TAnimal> where TAnimal : FarmAnimal, new()
{
protected TAnimal animal = new TAnimal();
public string GetProduct()
{
return animal.GetFood;
}
}
public class CowFarmer: AbstractFarmer<Cow>
{
}
public class ChickenFarmer …Run Code Online (Sandbox Code Playgroud)