小编Yeh*_*tan的帖子

从泛型抽象类java返回子类

所以,我有一个表示Input类型对象的抽象类 -

public abstract class Input<E>
Run Code Online (Sandbox Code Playgroud)

我有两个扩展它的类,一个是ButtonInput,另一个是TextInput.两者都扩展了输入,所以它并不重要.我将使用TextInput来解释.
这是TextInput类的防御:

public class TextInput extends Input<TextInput>
Run Code Online (Sandbox Code Playgroud)

我想要做的是将作为E(在这种情况下为TextInput)返回 -

public E setTextColor(Color color) {
        this.colorText = color;
        return (E)this;
    }
Run Code Online (Sandbox Code Playgroud)

所以,如果我打电话给例如:

new TextInput().setColor(Color.black)
Run Code Online (Sandbox Code Playgroud)

它应该返回TextInput.它正在工作,但它显示以下警告 -

警告:[未选中]未选中强制转换
(E)此; required:E
found:输入
E是一个类型变量:
E扩展在类Input中声明的Object

关于以下代码行 -

 return (E) this;
Run Code Online (Sandbox Code Playgroud)

有人知道怎么解决吗?
谢谢

java generics

2
推荐指数
1
解决办法
1465
查看次数

Golang中的动态转换

所以......我正在使用Gin框架为我的想法创建一个RESTful API,我遇到了以下问题 - 让我们说我有以下端点:

/a/:id/*action /b/:id/*action /c/:id/*action 所以,显然,当我没有给出任何动作时,我想返回给定ID的数据.意思是,我只是查询一些数据并返回它,这意味着功能基本相同,只返回的数据不同.

这是我的一个示例代码 -

   func GetBusiness(c *gin.Context) {                                                                                                                                                                                     
       businessID, err := strconv.Atoi(c.Param("id"))                                                                                                                                                                                  
       if businessID == 0 || err != nil {                                                                                                                                                                                               
           c.JSON(http.StatusBadRequest, gin.H{"success": false, "errorMessage": "Missing ID"})                                                                                                                                         
       }                                                                                                                                                                                                                                 
       business := &Business{}                                                                                                                                                                                                           
       business, err = business.Get(businessID)                                                                                                                                                                                         
       if err != nil {                                                                                                                                                                                                                  
           c.JSON(http.StatusBadRequest, gin.H{"success": false, "errorMessage": "Business not found"})                                                                                                                                
       }                                                                                                                                                                                                                                
      c.JSON(http.StatusOK, business)                                                                                                                                                                                                   
   }   
Run Code Online (Sandbox Code Playgroud)

因此,显然,业务可以成为用户或其他任何东西.所以,经过长时间的阐述,我向你的观众提出的问题是,如何在这种情况下防止代码重复?我已经尝试过使用界面,但我仍然在努力解决围棋的OO性质,所以我真的很喜欢任何帮助.

提前致谢!

oop rest dry go

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

Goroutine仅在执行fmt.Println时有效

出于某种原因,当我删除fmt.Printlns然后代码阻塞.我不知道为什么会这样.我想要做的就是实现一个简单的并发限制器......

我从来没有经历过这么奇怪的事情.这就像fmt冲刷变量或其他东西并使其工作.

此外,当我使用常规函数而不是goroutine时,它也可以工作.

这是以下代码 -

package main

import "fmt"

type ConcurrencyLimit struct {
    active int
    Limit  int
}

func (c *ConcurrencyLimit) Block() {
    for {
        fmt.Println(c.active, c.Limit)
        // If should block
        if c.active == c.Limit {
            continue
        }
        c.active++
        break
    }
}

func (c *ConcurrencyLimit) Decrease() int {
    fmt.Println("decrease")
    if c.active > 0 {
        c.active--
    }
    return c.active
}

func main() {
    c := ConcurrencyLimit{Limit: 1}
    c.Block()
    go func() {
        c.Decrease()
    }()
    c.Block()
}
Run Code Online (Sandbox Code Playgroud)

澄清:尽管我接受了@kaedys的回答(这里 …

concurrency go goroutine

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

Elasticbeanstalk 返回“504 网关超时”

我的 API 中有一个端点,需要一些时间才能返回响应(>1 分钟)。

我已将 API 部署到 Elasticbeanstalk,现在当我尝试访问它时,我从 Nginx 收到 504 网关超时

<html>
<head><title>504 Gateway Time-out</title></head>
<body>
<center><h1>504 Gateway Time-out</h1></center>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

go amazon-web-services node.js amazon-elastic-beanstalk

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