小编Tha*_*iar的帖子

使用泛型方法作为重载的替代方法?

超载很好.但是如果我们认为我们有两个对象ObjectA和objectB.两者都有"id"和"name"变量.我想写一个方法(在第三类),它返回给定对象的名称.编写重载函数使我重复代码.这是一个很好的做法吗?改为使用泛型函数会不会更好?

所以,我知道我可以编写一个重载函数,某事.像那样:

public String getInfo(ObjectA o){
    if(o.getId()!=1) return o.name;
    return "";
}
public String getInfo(ObjectB o){
    if(o.getId()!=1) return o.name;
    return "";
}
Run Code Online (Sandbox Code Playgroud)

它工作正常.但两个功能都是一样的!唯一的区别是事实,他们需要一个不同类型的论点.因为它们看起来一样,是不是违反了DRY规则?我尝试编写简单的泛型方法,但IDE将该.getId和that.name()标记为错误,并建议将其转换为((ObjectA)).getId()或((ObjectB)).getId() .我没有在"T that = clazz.cast(o);"我做错了什么?

public <T> String getInfo(Class<T> clazz, Object o) {
              T that = clazz.cast(o);
              if (that.getId()!=1) return that.name;

            return "";
        }
Run Code Online (Sandbox Code Playgroud)

一般来说,我想知道,如果我的想法是可能的.我该如何解决我的错误?而且,这是一个好主意吗?或者简单地编写重载函数是否更好?

java oop generics

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

使用多态初始化对象列表

我有一个关于应用多态的问题:让我们假设我有一个类Bird,并且我有许多扩展它的类(比如Pigeon,Falcon依此类推).接下来,我有一Cage堂课.在这堂课中,我想列出一个生活在笼子里的鸟类(只有一种鸟可以生活在每个笼子里).

因此,我不知道列表的扩展类型(A Pigeon?或者可能是Eagle?),我唯一知道的是它将是一个Bird.

如果 Pigeon extends Bird

使用多态性我可以将一只鸟声明为: Bird tom = new Pigeon();而不是Pigeon tom = new Pigeon();

那么为什么我不能在构造函数中初始化类似的东西:[...]

private List<Bird> birdList;

    public Cage() {
        this.birdList = new ArrayList<Pigeon>();
        /* Instead of birdList = new ArrayList<Bird>(); */
    }
Run Code Online (Sandbox Code Playgroud)

如果你不能这样做,是否有可能以另一种方式实现我的目标?

java polymorphism list

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

在 Mysql 中将列类型从 tinyInt 更改为 Varchar

我需要将列类型从tinyInt(用作bool)更改为Varchar,而不丢失数据。我在 stack-overflow 上找到了很多答案,但它们都是用 postgres 编写的,我不知道如何在 Mysql 中重写它。堆栈溢出问题的答案如下:

ALTER TABLE mytabe ALTER mycolumn TYPE VARCHAR(10) USING CASE WHEN mycolumn=0 THEN 'Something' ELSE 'TEST' END;

类似的逻辑在 Mysql 中会是什么样子?

mysql sql alter-table alter-column

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

标签 统计

java ×2

alter-column ×1

alter-table ×1

generics ×1

list ×1

mysql ×1

oop ×1

polymorphism ×1

sql ×1